2016-10-15 6 views
0

ServiceAsyncTask이 있습니다. 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.os.Handler.dispatchMessage (Handler.java:100 AT) ) android.os.Looper.loop (Looper.java:194에서 ) android.app.ActivityThread.main (ActivityThread.java:5391에서 ) (네이티브 메소드) at java.lang.reflect.Method.invoke (Method.java:525) 에서 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.app.ActivityThread.main (ActivityThread.java:5391)에서 android.os.Looper.loop (Looper.java:194) 에서 android.os.Handler.dispatchMessage (Handler.java:100) 에서 java.lang.reflect.Method.invoke에서 java.lang.reflect.Method.invokeNative (기본 방법) (Method.java:525)에서

답변

0

Intent를 얻기의 당신의 방법이 올바르지 않습니다. BroadcastReceiver이 (가) getIntent() (으)로 전화를 걸기 때문에 활동 클래스에 있다고 생각합니다. 그러나 getIntent()은 수신자가 아닌 액티비티에 Intent을 제공합니다. receiver에 대한 Intent은 방법 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

관련 문제