TaskStackBuilder#startActivities()NullPointerException异常 [英] TaskStackBuilder#startActivities() NullPointerException
问题描述
我有一个不断4.4.2和4.4.3设备发生的(虽然我不知道这是一个API问题)崩溃,其中在一些 ParsePushBroadcastReceiver
以下code使一个 NullPointerException异常
某处深 startActivities
调用中。
意向意图=新的意图(背景下,SomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TaskStackBuilder.create(上下文)
.addParentStack(SomeActivity.class)
.addNextIntent(意向)
.startActivities();
我试图测试,看看上下文是否为空,然而,意向实例会一直抓住这一点。它也可能是值得注意的是,这个应用程序是使用解析按
。
崩溃日志本次大跌:
了java.lang.RuntimeException:无法启动接收器com.example.app.android.receiver.PushReceiver:显示java.lang.NullPointerException
在android.app.ActivityThread.handleReceiver(ActivityThread.java:2567)
在android.app.ActivityThread.access $ 1800(ActivityThread.java:161)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1341)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:157)
在android.app.ActivityThread.main(ActivityThread.java:5356)
在java.lang.reflect.Method.invokeNative(Method.java)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
在dalvik.system.NativeStart.main(NativeStart.java)
显示java.lang.NullPointerException:产生的原因
在android.os.Parcel.readException(Parcel.java:1471)
在android.os.Parcel.readException(Parcel.java:1419)
在android.app.ActivityManagerProxy.startActivities(ActivityManagerNative.java:4494)
在android.app.Instrumentation.execStartActivitiesAsUser(Instrumentation.java:1496)
在android.app.Instrumentation.execStartActivities(Instrumentation.java:1458)
在android.app.ContextImpl.startActivities(ContextImpl.java:1465)
在android.content.ContextWrapper.startActivities(ContextWrapper.java:350)
在android.content.ContextWrapper.startActivities(ContextWrapper.java:350)
在android.support.v4.content.ContextCompatJellybean.startActivities(ContextCompatJellybean.java:26)
在android.support.v4.content.ContextCompat.startActivities(ContextCompat.java:105)
在android.support.v4.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:325)
在android.support.v4.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:301)
在com.example.app.android.receiver.PushReceiver.routePush(PushReceiver.java:59)
在com.example.app.android.receiver.PushReceiver.onPushOpen(PushReceiver.java:35)
在com.parse.ParsePushBroadcastReceiver.onReceive(ParsePushBroadcastReceiver.java:108)
在android.app.ActivityThread.handleReceiver(ActivityThread.java:2552)
在android.app.ActivityThread.access $ 1800(ActivityThread.java:161)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1341)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:157)
在android.app.ActivityThread.main(ActivityThread.java:5356)
在java.lang.reflect.Method.invokeNative(Method.java)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
在dalvik.system.NativeStart.main(NativeStart.java)
我是不是能解决这个问题,因为我有一个怀疑,这可能是针对4.4的bug。*设备。作为替代方案,我代替我使用 TaskStackBuilder
的通过 PendingIntent.getActivities
创建我的活动。就我而言,这提供了同样的功能,这是一个简单的更换。也许你会发现它有用。
最终意图parentIntent =新的意图(背景下,ParentActivity.class);
parentIntent.putExtra(ParentActivity.EXTRA,的ExtraValue);
最终意图childIntent =新的意图(背景下,ChildActivity.class);
childIntent.putExtra(ChildActivity.EXTRA,extraChildValue);
childIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
最终意图[]意图=新的意图[] {parentIntent,childIntent};
PendingIntent pendingIntent = PendingIntent.getActivities(背景下,INTENT_REQUEST_ code,意向,PendingIntent.FLAG_ONE_SHOT);
pendingIntent.send();
I have a crash that keeps occurring on 4.4.2 and 4.4.3 devices (although I'm not sure this is an API issue), where in some ParsePushBroadcastReceiver
the following code causes a NullPointerException
somewhere deep inside the startActivities
call.
Intent intent = new Intent(context, SomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TaskStackBuilder.create(context)
.addParentStack(SomeActivity.class)
.addNextIntent(intent)
.startActivities();
I have tried testing to see whether the context was null, however, the Intent instantiation would've caught that. It might also be worth noting that this application is using Parse Push
.
The crash log for this crash:
java.lang.RuntimeException: Unable to start receiver com.example.app.android.receiver.PushReceiver: java.lang.NullPointerException
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2567)
at android.app.ActivityThread.access$1800(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.NullPointerException
at android.os.Parcel.readException(Parcel.java:1471)
at android.os.Parcel.readException(Parcel.java:1419)
at android.app.ActivityManagerProxy.startActivities(ActivityManagerNative.java:4494)
at android.app.Instrumentation.execStartActivitiesAsUser(Instrumentation.java:1496)
at android.app.Instrumentation.execStartActivities(Instrumentation.java:1458)
at android.app.ContextImpl.startActivities(ContextImpl.java:1465)
at android.content.ContextWrapper.startActivities(ContextWrapper.java:350)
at android.content.ContextWrapper.startActivities(ContextWrapper.java:350)
at android.support.v4.content.ContextCompatJellybean.startActivities(ContextCompatJellybean.java:26)
at android.support.v4.content.ContextCompat.startActivities(ContextCompat.java:105)
at android.support.v4.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:325)
at android.support.v4.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:301)
at com.example.app.android.receiver.PushReceiver.routePush(PushReceiver.java:59)
at com.example.app.android.receiver.PushReceiver.onPushOpen(PushReceiver.java:35)
at com.parse.ParsePushBroadcastReceiver.onReceive(ParsePushBroadcastReceiver.java:108)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2552)
at android.app.ActivityThread.access$1800(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(NativeStart.java)
I wasn't able to solve this problem as I have a suspicion that this might be a bug specific to 4.4.* devices. As an alternative, I replaced my use of the TaskStackBuilder
with creating my activities via PendingIntent.getActivities
. In my case, this provided equivalent functionality and it was a straightforward replacement. Perhaps you might find it useful as well.
final Intent parentIntent = new Intent(context, ParentActivity.class);
parentIntent.putExtra(ParentActivity.EXTRA, extraValue);
final Intent childIntent = new Intent(context, ChildActivity.class);
childIntent.putExtra(ChildActivity.EXTRA, extraChildValue);
childIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
final Intent[] intents = new Intent [] {parentIntent, childIntent};
PendingIntent pendingIntent = PendingIntent.getActivities(context, INTENT_REQUEST_CODE, intents, PendingIntent.FLAG_ONE_SHOT);
pendingIntent.send();
这篇关于TaskStackBuilder#startActivities()NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!