2016-04-05 2 views
2

Ich versuche Arraylist durch eine Übertragung von einem Service in der Absicht, wie diesePass Arraylist in intent.putExtra in Broadcast-gibt null in getBundleExtra

ArrayList objects = new ArrayList(); 
    for (MasterVO vo : masterVOs) { 

     objects.add(vo.getMasterTables()); 
     objects.add(vo.getDeviceUpdateStatus()); 

    } 
    Bundle extra = new Bundle(); 
    extra.putSerializable("objects", objects); 
    intent.putExtra("extra", extra); 
    sendBroadcast(intent); 

Dann ist es in der Tätigkeit immer passieren:

private void updateUI(Intent intent) { 

    Bundle extra = getIntent().getBundleExtra("extra"); 
    ArrayList<Object> databaseList = (ArrayList<Object>) extra.getSerializable("objects"); 
     fillMasterTable(databaseList); 
} 

Die onReceive() der Sendung:

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     updateUI(intent); 
    } 
}; 

ich bin bekommen null in der extra. Was mache ich falsch? Ich habe gesehen, dass es Werte im `sendBroadcast'-Teil gibt.

+0

können Sie Code mit 'Broadcast Receiver' aktualisieren? –

+0

versuchen Sie immer, die schwere Arbeit in 'BroadCastReciever' zu vermeiden. der bessere Weg, um einen Service von Bradcast Receiver zu starten und die Benutzeroberfläche/Aktivität von dort zu aktualisieren. –

Antwort

2

Sie versuchen zu getIntent von activitynichtbroadcast receiver. Verwenden Sie die intent empfangen in onReceive.

public void onReceive(Context context, Intent intent) { 
     updateUI(intent); 
} 

private void updateUI(Intent intent) { 
    Bundle extra = intent.getBundleExtra("extra"); //use intent NOT getIntent() 
    ArrayList<Object> databaseList = (ArrayList<Object>) 
    extra.getSerializable("objects"); 
    fillMasterTable(databaseList); 
}