web-dev-qa-db-ja.com

Kotlin&Retrofit:シンプルPOST応答なし

私はPOST KotlinとRetrofitを使用して、リクエストのステータスコードにのみ興味があるリクエストを実行しようとしています。これ以上コンパイルされないか、非常に複雑です。

誰かがこのコードの改善を助けることができますか?:

interface ClientService {

        @POST("user/password-reset")
        fun passwortReset(@Query("email") email: String): Observable<Result>

        companion object {
            fun create(): ClientService {

                val retrofit = Retrofit.Builder()
                        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                        .addConverterFactory(GsonConverterFactory.create())
                        .baseUrl("https://test-backend.myurl.com/api/")
                        .build()

                return retrofit.create(ClientService::class.Java)
            }
        } 
    }

私はそれを呼び出す方法とステータスコードを取得する方法がわかりません。

5
netshark1000

この例を試してください

Build.gradleの下:

   // retrofit

    compile "com.squareup.retrofit2:retrofit:2.3.0"

    compile "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
    compile "com.squareup.retrofit2:converter-gson:2.3.0"

    // rxandroid

    compile "io.reactivex.rxjava2:rxandroid:2.0.1"
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'

インターフェース:

interface APIService {

    @POST("register")
    @FormUrlEncoded
    fun registrationPost(@Field("email") email: String,
                         @Field("password") password: String): Call<Registration>}


//**App Utils**

object ApiUtils {

    val BASE_URL = "your_url"

    val apiService: APIService
        get() = RetrofitClient.getClient(BASE_URL)!!.create(APIService::class.Java)

}

レトロフィットクライアント:

object RetrofitClient {

    var retrofit: Retrofit? = null

    fun getClient(baseUrl: String): Retrofit? {
        if (retrofit == null) {
            //TODO While release in Google Play Change the Level to NONE
            val interceptor = HttpLoggingInterceptor()
            interceptor.level = HttpLoggingInterceptor.Level.BODY
            val client = OkHttpClient.Builder()
                    .addInterceptor(interceptor)
                    .connectTimeout(100, TimeUnit.SECONDS)
                    .readTimeout(100, TimeUnit.SECONDS)
                    .build()

            retrofit = Retrofit.Builder()
                    .client(client)
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()
        }

        return retrofit

    }
}

主な活動

  //Variable declaration
  var mAPIService: APIService? = null

  //After oncreate

   mAPIService = ApiUtils.apiService

  //Some Button click

       mAPIService!!.registrationPost("[email protected]", "123456").enqueue(object : Callback<Registration> {

                override fun onResponse(call: Call<Registration>, response: Response<Registration>) {

                    Log.i("", "post submitted to API." + response.body()!!)

                    if (response.isSuccessful()) {

                        Log.i("", "post registration to API" + response.body()!!.toString())
                        Log.i("", "post status to API" + response.body()!!.status)
                        Log.i("", "post msg to API" + response.body()!!.messages)

                    }
                }

                override fun onFailure(call: Call<Registration>, t: Throwable) {

                }
            })
10
Arun

関数内では、次のように呼び出す必要があります。

 fun resetPassword(email:String) {

    val clientService = ClientService.create(APIConstants
            .BASE_URL_WORKSPACE)
    addSubscription(apiService.login(APIConstants.API_ACTION_LOGIN, userName, password,
            deviceid), object : APICallback<UserLoginResponse>() {
        override fun onSuccess(model: UserLoginResponse) {
            if (TextUtils.isEmpty(model.errorMessage)) {
                mvpView.getDataSuccess(model, apiRequestCode)
            } else {
                mvpView.getDataFail(model.errorMessage, apiRequestCode)
            }
        }

        override fun onFailure(msg: String?) {
            LogUtil.e("Login Failure()- " + msg!!)
        }

        override fun onFinish() {}
    })
 }

OnSuccess()メソッドで成功の応答/結果を取得します。

0
Saritha G