1

Ich übergebe Daten von AsyncTask an ein Fragment der Aktivität mit Registerkarten. Warum wird onEvent() von EventBus nicht aufgerufen?onEvent() wird nicht aufgerufen?

BackgroundWorker.java doInBackground() durch MainActivity

public class BackgroundWorker extends AsyncTask<String,Void,String> { 

    @Override 
    protected void onPostExecute(String line) { 
    userResult = line.split(" "); 
    String result = userResult[0]; 

    if(result.equals("Success")){ 
     CustomMessageEvent event = new CustomMessageEvent(); 
     event.setCustomMessage(line); 
     Intent intent = new Intent(context,TabActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(intent); 
     EventBus.getDefault().post(event); 
    } 
    } 
} 
genannt

ProfileTab.java Diese Datei ein Fragment von Registerkarten Aktivität ist. Gibt es etwas, was in Registerkarten Aktivitäten getan werden sollte oder sollte doInBackground erneut aufgerufen werden.

public class ProfileTab extends Fragment { 

    public TextView t1; 
    private View rootView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.profile, container, false); 

    t1 = (TextView) rootView.findViewById(R.id.textView4); 

    EventBus.getDefault().register(this); 
    Log.d(TAG, "onCreateView: "); 

    return rootView; 
    } 

    @Subscribe(threadMode = ThreadMode.ASYNC) 
    public void onEventAsync(CustomMessageEvent event) { 
    Log.d(TAG, "onEvent: "); 
    t1.setText(event.getCustomMessage()); 
    } 

} 

Versuchte LocalBroadcastManager und das Ergebnis war gleich, onReceive() nicht genannt wurde. Wo gehe ich falsch?

Antwort

0

Wenn Sie Aktivität in Ihrem onPostExecute starten, empfehle ich Passdaten nach Absicht, nicht Ereignisse - es ist einfacher. Ihre abonnierte Methode wird nicht aufgerufen, da das Ereignis vor der Registrierung gesendet wurde - verwenden Sie postSticky anstelle von post und Sie erhalten ein Ereignis.

Ich nehme an, Sie möchten line (String) übergeben. So konstruiert Absicht:

Intent intent = new Intent(context,TabActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.putExtra("LINE", line); 
context.startActivity(intent); 

als in Ihrem TabActivity in onCreate gebenen Wert lesen:

String line = getIntent().getStringExtra("LINE", ""); 
+0

ja, das helfen könnte. – Vikrant

+0

'postSticky' funktioniert auch nicht. – raviw3

+0

Wie ich vorschlagen, verwenden Sie Absicht, nicht 'EventBus' dort. –