我有此代码:
Api.logout(() -> {
//Do some work cleaning up
ActivityCompat.finishAffinity(this)
startActivity(new Intent(this, SignInActivity.class))
})
此代码不断引发异常:
java.lang.NullPointerException: Attempt to read from field 'com.android.server.am.TaskRecord com.android.server.am.ActivityRecord.task' on a null object reference
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.ActivityManagerProxy.finishActivityAffinity(ActivityManagerNative.java:2709)
at android.app.Activity.finishAffinity(Activity.java:4717)
at android.support.v4.app.ActivityCompat.finishAffinity(ActivityCompat.java:287)
at my.app.api.Api.lambda$logout$0(Api.java:43)
at my.app.MainActivity.performLogOut(MainActivity.java:90)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5261)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:939)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:734)
好像这个错误位于ActivityCompat.finishAffinity
方法中。
什么原因导致该错误以及如何解决?
答案 0 :(得分:0)
首先,调用Intent,然后完成Activity,否则在调用Intent时,Activity Context将为null。
startActivity(new Intent(this, SignInActivity.class))
ActivityCompat.finishAffinity(this)
答案 1 :(得分:0)
就我而言,这发生在活动已经是 finished
或 isFinishing
时。我只找到了一个解决方案:
override fun onDestroy() {
super.onDestroy()
// kill or unsubscribe your `Api` here
}
我的代码看起来像这样:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.some_activity)
handler = Handler(mainLooper)
}
private fun someMethod() {
handler.postDelayed({ finishAffinity() }, 10000)
}
override fun onDestroy() {
super.onDestroy()
handler.removeCallbacksAndMessages(null)
}