Редко получаю Retrofit onResponse ошибку и сбой - PullRequest
0 голосов
/ 07 апреля 2020

Я получил эту ошибку на Crashlystics:

kotlin.KotlinNullPointerException: 
com.example.view.main.fragment.ListFragment$getListItems$1.onResponse (ListFragment.java:155)
retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0 (DefaultCallAdapterFactory.java:81)
retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCall$1$3wC8FyV4pyjrzrYL5U0mlYiviZw.run (-.java:6)
android.os.Handler.handleCallback (Handler.java:790)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loop (Looper.java:164)
android.app.ActivityThread.main (ActivityThread.java:7025)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:441)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1408)

Вот как я реализовал использование Retrofit.

ServiceGenerator.createService(MyService::class.java)!!
   .getList(listData)
   .enqueue(object : Callback<ListResult> {
   override fun onResponse(call: Call<ListResult>, response: Response<ListResult>) {
        // TODO: 
   }
   override fun onFailure(call: Call<ListResult>, t: Throwable) {
        // TODO:
   }
}) 

Понятия не имею, что с ним не так. Я пытался проверить это на моих устройствах. Тем не менее, я никогда не получаю это Cra sh. Может быть, ServiceGenerator.createService(MyService::class.java)!! часть должна иметь ? вместо !!? Я не думаю, что это должно быть ?, потому что оно не может быть нулевым. Он всегда инициализируется.

object ServiceGenerator {
    fun <S> createService(serviceClass: Class<S>): S? {
        val logging = HttpLoggingInterceptor()

        if (BuildConfig.DEBUG) {
            logging.level = HttpLoggingInterceptor.Level.BODY
        } else {
            logging.level = HttpLoggingInterceptor.Level.NONE
        }

        val client = OkHttpClient.Builder()
        client.addInterceptor {
            val original = it.request()

            val request = original.newBuilder()
                    .build()

            it.proceed(request)
        }

        client.addInterceptor(logging)
                .connectTimeout(30, TimeUnit.SECONDS)
                .callTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)

        val gson = GsonBuilder()
                .setLenient()
                .setDateFormat("yyyy-MM-dd'T'hh:mm:ssZ")
                .create()

        val retrofit: Retrofit
        try {
            retrofit = Retrofit.Builder()
                    .baseUrl(BASE_API_URL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .client(client.build())
                    .build()

            return retrofit.create(serviceClass) 
        } catch (e: Exception) {
            e.printStackTrace()
        }

        return null
    }
}
interface MyService {
    @POST("/call")
    fun getList(@Body listData: ListData?): Call<ListResult>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...