setActivity时发生NullPointerException

尝试打开“活动”时,我的应用在某些设备上崩溃。并非总是仅在某些设备上出现此问题。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.pickerManager = GlobalHolder.getInstance().getPickerManager();
    this.pickerManager.setactivity(Tempactivity.this); // <== line with error
    this.pickerManager.pickPhotoWithPermission();
}

Stacktrace:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chillihaze.deskeep/com.libraries.imagepicker.Tempactivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.libraries.imagepicker.e.a(android.app.activity)' on a null object reference
at android.app.activityThread.performLaunchactivity(activityThread.java:3122)
at android.app.activityThread.handleLaunchactivity(activityThread.java:3261)
at android.app.servertransaction.LaunchactivityItem.execute(LaunchactivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.activityThread$H.handleMessage(activityThread.java:1977)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.activityThread.main(activityThread.java:6923)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:870)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.libraries.imagepicker.e.a(android.app.activity)' on a null object reference
at com.libraries.imagepicker.Tempactivity.onCreate(SourceFile:3)
at android.app.activity.performCreate(activity.java:7148)
at android.app.activity.performCreate(activity.java:7139)
at android.app.Instrumentation.callactivityOnCreate(Instrumentation.java:1293)
at android.app.activityThread.performLaunchactivity(activityThread.java:3102)

我无法在设备上重现该错误,因此无法对其进行测试。

xiongyong3036 回答:setActivity时发生NullPointerException

  

我无法在设备上重现该错误,因此无法对其进行测试。

啊,您 可以 所有 Android设备上重现该错误,您只需要知道如何; )

在发生内存不足的情况后,仅会首先重新创建 current 活动,在向后导航时将重新创建先前的Activity,并且所有静态变量都将被清空(因为该过程从技术上来说已重新启动)。 / p>

再现方式:

  • 在您的应用中转到TempActivity

  • 使用HOME按钮将您的应用程序置于后台

  • 点击Android Studio中的TERMINATE按钮

terminate button

  • 从启动器重新启动应用

您将遇到这种现象。


解决方案是使用static ,并且要有知识和警惕 ,即MAIN活动(您用<intent-filter>定义的活动MAIN操作)不能保证在Android应用执行期间完全运行,因此您应该相应地初始化内容。

您可以在应用程序中轻松地返回“详细信息”屏幕作为“首次启动活动”,而“列表”屏幕仅在后退导航时创建。

您还可以检出intent.putExtra(getIntent()方法,这些方法由Android System在进程终止/内存不足情况下保留。

,

在下一行确保this.pickerManager不为空

this.pickerManager.setActivity(TempActivity.this)
本文链接:https://www.f2er.com/3094380.html

大家都在问