2017-02-01 1 views
2

Il est la première fois que j'utilise cette bibliothèque, mais je suivais tutoriel this vidéo pour envoyer des données par fragments, mais dans mon cas, il est juste Activités .. Alors ce que je l'ai faitdonnées passage d'une activité à l'aide de Otto ne fonctionne pas

activité que je vous envoie des données:

public void onClick(View view) { 
    String passing_data = new Gson().toJson(user); 
    BusStation.getBus().post(new MessageData(passing_data)); 
    Intent intent = new Intent(activity,UserAdsView.class); 
    activity.startActivity(intent); 
} 

Busstation classe:

public class BusStation { 
    private static Bus bus = new Bus(); 

    public static Bus getBus() { 
     return bus; 
    } 
} 

MessageData Classe:

public class MessageData { 
    private String msgData; 

    public MessageData(String msgData) { 
     this.msgData = msgData; 
    } 

    public String getMsgData() { 
     return msgData; 
    } 
} 

Et enfin à l'activité de UserAdsView:

@Override 
protected void onResume() { 
    super.onResume(); 
    BusStation.getBus().register(this); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    BusStation.getBus().unregister(this); 
} 

@Subscribe 
public void recievedData(MessageData messageData){ 
    target = messageData.getMsgData(); 
    Toast.makeText(getApplicationContext(), target, Toast.LENGTH_SHORT).show(); 
} 

Comme on l'a mentionné sur la vidéo, cette méthode recievedData devrait être congédié!

Répondre

4

Lorsque vous envoyez une notification en première activité à ce moment-là, UserAdsView Activity est pas enregistré donc il n'y a pas écouteurs pour les événements.

A cette ligne

BusStation.getBus().post(new MessageData(passing_data)); 

vous envoyez une notification, mais il n'y a rien enregistré pour recevoir cette notification. c'est-à-dire UserAdsView Activity n'a pas encore commencé.

Si vous avez besoin de transmettre des données à l'activité au moment du lancement, il suffit d'envoyer via Intent.

+0

Alors ce que je dois faire? Remplacer un onStart et BusStation.getBus(). Register (this); ? –

+0

Non. Voir ma mise à jour. Vous pouvez simplement envoyer des données à l'activité dans le 'Intent' – mallaudin

+1

Vous pouvez utiliser' Sticky Event' dans ce cas. – mallaudin

0

Vous devez rendre votre objet MessageData parcelable.

Puis dans votre onClick():

public void onClick(View view) { 
    String passing_data = new Gson().toJson(user); 
    Bundle extras = new Bundle(); 
    extras.putParcelable("key",new MessageData(passing_data)); 
    Intent intent = new Intent(activity,UserAdsView.class); 
    intent.putExtras(extras) 
    activity.startActivity(intent); 
} 

Puis, en onCreate() de votre UserAdsView Activité:

MessageData data = (MessageData)getIntent().getExtras().getParcelable("key"); 
+0

'getExtras()' n'existe pas. –

+0

Il est 'getIntent() getExtras()' ' – mallaudin

+0

ici à de nouveaux MessageData (de passing_data)).' Il est dit que je dois jeter, et je l'ai fait, mais l'application juste revenir à une activité précédemment. –