9

Tôi gặp sự cố xảy ra trên các thiết bị 4.4.2 và 4.4.3 (mặc dù tôi không chắc đây là vấn đề về API), trong đó ở một số mã số ParsePushBroadcastReceiver gây ra một NullPointerException ở đâu đó sâu bên trong cuộc gọi startActivities.TaskStackBuilder # startActivities() NullPointerException

Intent intent = new Intent(context, SomeActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
TaskStackBuilder.create(context) 
      .addParentStack(SomeActivity.class) 
      .addNextIntent(intent) 
      .startActivities(); 

Tôi đã thử kiểm tra xem ngữ cảnh có rỗng hay không, tuy nhiên, sự khởi tạo Intent sẽ bắt được điều đó. Nó cũng có thể đáng chú ý là ứng dụng này đang sử dụng Parse Push. Các nhật ký sự cố cho vụ tai nạn này:

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) 
+1

Tôi đang chạy trong về cơ bản giống nhau. Chỉ xem nó trên 4.4.2 và 4.4.4 –

+0

Có may mắn không? Bạn đã giải quyết nó? – Arthur

+0

Tôi không, thật không may. –

Trả lời

11

tôi đã không thể giải quyết vấn đề này như tôi có một nghi ngờ rằng đây có thể là một lỗi cụ thể để 4,4 * thiết bị.. Thay vào đó, tôi đã thay thế việc sử dụng TaskStackBuilder bằng cách tạo hoạt động của mình qua PendingIntent.getActivities. Trong trường hợp của tôi, điều này cung cấp chức năng tương đương và nó là một sự thay thế đơn giản. Có lẽ bạn có thể thấy nó hữu ích là tốt.

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(); 
+0

Giải pháp tuyệt vời. Sẽ ném nó trong bản cập nhật tiếp theo cho ứng dụng này như là một thay thế cho API 19, sẽ báo cáo lại với những phát hiện. – alex

+0

Đã chạy tính năng này trong sản xuất một chút và không gặp phải bất kỳ sự cố nào. Công cụ tuyệt vời @daniel – alex

Các vấn đề liên quan