2016-10-15 4 views
0

ServiceにはAsyncTaskがあります。 AsyncTaskからブロードキャストとしてArrayListを送信します。BroadcastReceiverのサービスからarraylistを取得すると、NullpointerExceptionが返されます

ArrayListonReceive()になると、NullpointerExceptionとなります。

これは私がArrayListを送信する方法です。

transits_list = new ArrayList<Transit>(); 
transits_list.add(trs); 

Intent arrayListIntent = new Intent("arrayList"); 
Bundle extra = new Bundle(); 
extra.putSerializable("transArray", transits_list); 
intent.putExtra("extra", extra); 
sendBroadcast(arrayListIntent); 

TransitクラスはSerializableを実装しています。 ArrayList

@Override 
    public void onReceive(Context context, Intent intent) { 
     ArrayList<Transit> myList; 

     Bundle extra = getIntent().getBundleExtra("extra"); 
     ArrayList<Transit> transArrayListFromBroadCast =  (ArrayList<Transit>) extra.getSerializable("transArray"); 
     System.out.print("transArrayListFromBroadCast "+transArrayListFromBroadCast); 
    } 

を受け

私はこの行のNullpointerExceptionを得る:

ArrayList<Transit> transArrayListFromBroadCast =  (ArrayList<Transit>) extra.getSerializable("transArray"); 

例外ログから:

致命的な例外:メイン java.lang.RuntimeException:ブロードキャストインテントを受信中にエラーが発生しました{act = arrayList flg = 0x10 } android.os.Handler.handleCallbackでandroid.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:798) で[email protected]3268(Handler.java:800でandroid.app.ActivityThread.main(ActivityThread.java:5391)でandroid.os.Handler.dispatchMessage android.os.Looper.loopで(Handler.java:100) (Looper.java:194) で) (ネイティブメソッド) のjava.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit。 java:833) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(ネイティブメソッド) 原因:java.lang.NullPointerException at com.prematix.tollsystem.avcc .AvccActivity $ ArrayListReceiver.onReceive(AvccActivity.java:271) android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:788) android.os.Handler.handleCallback(Handler.java:800) android.os.Handler.dispatchMessage(Handler.java:100)android.os.Looper.loop(Looper.java:194)の android.app.ActivityThread.main(ActivityThread.java:5391) java.lang.reflect.Method.invokeNative java.lang.reflect.Method.invokeで(ネイティブメソッド) (Method.java:525)

答えて

0

Intentを得ることのあなたの方法が間違っています。私はあなたのBroadcastReceiverがアクティビティクラスにあると信じています。あなたはgetIntent()です。ただし、getIntent()は受信者ではなくアクティビティにIntentを提供します。 receiverのは、方法onReceive()自体に提供されます。

は、余分な追加:

Intent arrayListIntent = new Intent("arrayList"); 
Bundle extra = new Bundle(); 
extra.putSerializable("transArray", transits_list); 
intent.putExtra("extra", extra); 
sendBroadcast(arrayListIntent); 

を追加行き方:

@Override 
public void onReceive(Context context, Intent intent) { 
    ArrayList<Transit> myList; 

    Bundle extra = intent.getBundleExtra("extra"); 
    ArrayList<Transit> transArrayListFromBroadCast = (ArrayList<Transit>) extra.getSerializable("transArray"); 
    // System.out.print("transArrayListFromBroadCast "+transArrayListFromBroadCast); 
} 
+0

おかげで、あなたのコードを次のように変更します。私はあなたに知らせるように努力します – Varun

関連する問題