Я получил эту ошибку на 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>
}