Android 当初始化改装时,我得到错误:KotlinNullPointerException
这里是RestClientFactory.ktAndroid 当初始化改装时,我得到错误:KotlinNullPointerException,android,kotlin,retrofit2,Android,Kotlin,Retrofit2,这里是RestClientFactory.kt class TransportService { companion object { private val waitressCallRestClient = RestClientFactory.createRestClient(WaitressCallRestClient::class.java) private val TAG = TransportService::class.java.name
class TransportService {
companion object {
private val waitressCallRestClient = RestClientFactory.createRestClient(WaitressCallRestClient::class.java)
private val TAG = TransportService::class.java.name
init {
Debug.d(TAG, "TransportService_initialize")
}
}
}
错误:
.addConverterFactory(GsonConverterFactory.create(gson!!))
11-08 13:26:58.104 E/AndroidRuntime(13653):致命异常:主
11-08 13:26:58.104 E/AndroidRuntime(13653):进程:com.myproject.android.debug,PID:13653
11-08 13:26:58.104 E/AndroidRuntime(13653):java.lang.ExceptionInInitializeError
11-08 13:26:58.104 E/AndroidRuntime(13653):在com.myproject.android.service.TransportService.(TransportService.kt:25)
11-08 13:26:58.104 E/AndroidRuntime(13653):在com.myproject.android.viewmodel.FeedbackViewModel$doClickSend$1.invokeSuspend(FeedbackViewModel.kt:39)
11-08 13:26:58.104 E/AndroidRuntime(13653):在kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
11-08 13:26:58.104 E/AndroidRuntime(13653):在kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
11-08 13:26:58.104 E/AndroidRuntime(13653):在android.os.Handler.handleCallback(Handler.java:739)
11-08 13:26:58.104 E/AndroidRuntime(13653):在android.os.Handler.dispatchMessage(Handler.java:95)上
11-08 13:26:58.104 E/AndroidRuntime(13653):在android.os.Looper.loop(Looper.java:148)
11-08 13:26:58.104 E/AndroidRuntime(13653):位于android.app.ActivityThread.main(ActivityThread.java:5417)
11-08 13:26:58.104 E/AndroidRuntime(13653):位于java.lang.reflect.Method.invoke(本机方法)
11-08 13:26:58.104 E/AndroidRuntime(13653):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-08 13:26:58.104 E/AndroidRuntime(13653):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-08 13:26:58.104 E/AndroidRuntime(13653):由以下原因引起:kotlin.KotlinNullPointerException
11-08 13:26:58.104 E/AndroidRuntime(13653):在com.myproject.android.api.RestClientFactory.(RestClientFactory.kt:40)
11-08 13:26:58.104 E/AndroidRuntime(13653):。。。还有11个
更换
11-08 13:26:58.104 E/AndroidRuntime(13653): FATAL EXCEPTION: main
11-08 13:26:58.104 E/AndroidRuntime(13653): Process: com.myproject.android.debug, PID: 13653
11-08 13:26:58.104 E/AndroidRuntime(13653): java.lang.ExceptionInInitializerError
11-08 13:26:58.104 E/AndroidRuntime(13653): at com.myproject.android.service.TransportService.<clinit>(TransportService.kt:25)
11-08 13:26:58.104 E/AndroidRuntime(13653): at com.myproject.android.viewmodel.FeedbackViewModel$doClickSend$1.invokeSuspend(FeedbackViewModel.kt:39)
11-08 13:26:58.104 E/AndroidRuntime(13653): at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
11-08 13:26:58.104 E/AndroidRuntime(13653): at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
11-08 13:26:58.104 E/AndroidRuntime(13653): at android.os.Handler.handleCallback(Handler.java:739)
11-08 13:26:58.104 E/AndroidRuntime(13653): at android.os.Handler.dispatchMessage(Handler.java:95)
11-08 13:26:58.104 E/AndroidRuntime(13653): at android.os.Looper.loop(Looper.java:148)
11-08 13:26:58.104 E/AndroidRuntime(13653): at android.app.ActivityThread.main(ActivityThread.java:5417)
11-08 13:26:58.104 E/AndroidRuntime(13653): at java.lang.reflect.Method.invoke(Native Method)
11-08 13:26:58.104 E/AndroidRuntime(13653): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-08 13:26:58.104 E/AndroidRuntime(13653): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-08 13:26:58.104 E/AndroidRuntime(13653): Caused by: kotlin.KotlinNullPointerException
11-08 13:26:58.104 E/AndroidRuntime(13653): at com.myproject.android.api.RestClientFactory.<clinit>(RestClientFactory.kt:40)
11-08 13:26:58.104 E/AndroidRuntime(13653): ... 11 more
到
httpClient
和gson
为空,您永远不会初始化它们
停止使用
代码>编译器会告诉您;) 您需要初始化Gson对象
Gson Gson=new GsonBuilder()
.setLenient()
.create();
我改成这样,现在开始工作:
1) try using this, If you do not want to use gson in this class
private var retrofit: Retrofit? = null
retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(httpClient.build())
.addConverterFactory(GsonConverterFactory.create())
.build()
2) or if you want to use gson here then below code may help you :
Gson gson = new GsonBuilder()
.registerTypeAdapter(Id.class, new IdTypeAdapter())
.enableComplexMapKeySerialization()
.serializeNulls()
.setDateFormat(DateFormat.LONG)
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.setVersion(1.0)
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
您的var gson
为空且从未分配给,您执行了不安全的非空强制转换gson代码>。您忘记初始化gsonvar gson:gson?=空
.addConverterFactory(GsonConverterFactory.create(gson!!))
.addConverterFactory(GsonConverterFactory.create(GsonBuilder().setLenient().create()))
1) try using this, If you do not want to use gson in this class
private var retrofit: Retrofit? = null
retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(httpClient.build())
.addConverterFactory(GsonConverterFactory.create())
.build()
2) or if you want to use gson here then below code may help you :
Gson gson = new GsonBuilder()
.registerTypeAdapter(Id.class, new IdTypeAdapter())
.enableComplexMapKeySerialization()
.serializeNulls()
.setDateFormat(DateFormat.LONG)
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.setVersion(1.0)
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
object RestClientFactory {
private val gsonBuilder = GsonUtil.gsonbuilder
private var gson: Gson
private val CONNECTION_TIME_OUT_SEC = 60
private val READ_TIME_OUT_SEC = 60
private val WRITE_TIME_OUT_SEC = 60
private var httpClient: OkHttpClient.Builder
private val httpLoggingInterceptor =
HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
private val TAG = RestClientFactory::class.java.name
init {
Debug.d(TAG, "static_initializer: START_GSON_setting!")
gson = gsonBuilder.create();
gsonBuilder.setDateFormat(DateUtil.TO_FO_DATETIME_FORMAT)
// default timeout = 10 sec
httpClient = OkHttpClient.Builder() // default timeout = 10 sec
.connectTimeout(CONNECTION_TIME_OUT_SEC.toLong(), TimeUnit.SECONDS)
.readTimeout(READ_TIME_OUT_SEC.toLong(), TimeUnit.SECONDS)
.writeTimeout(WRITE_TIME_OUT_SEC.toLong(), TimeUnit.SECONDS)