2017-08-12 4 views
0

Ich habe einige Fragen über die Weitergabe von Daten an eine andere Aktivität. Lassen Sie uns sagen, dass ich drei Aktivitäten habe ich sie genanntKorrekter Datentransfer zwischen Aktivitäten

erste Aktivität

zweite Aktivität

dritte Aktivität

Wenn App vom Benutzer aktiviert ist, ist der Benutzer in der ersten Aktivität. Um von der ersten Aktivität zur dritten Aktivität zu gelangen, muss der Benutzer auch die zweite Aktivität durchlaufen. Der Workflow

erste Aktivität (Benutzerdruckknopf) -> zweite Aktivität (Benutzerdruckknopf) -> dritte Aktivität

die ich von der ersten Aktivität im dritten benötigen Daten Nehmen wir an, Aktivität, also muss ich meine HashMap mit meinen Daten von der ersten Aktivität zur zweiten Aktivität übergeben und dann zur dritten Aktivität? Gibt es eine Möglichkeit, Daten direkt von der ersten Aktivität an die dritte Aktivität zu übergeben, aber wie gesagt, muss der Benutzer gehen auch durch zweite Aktivität.

ich das in dieser Art und Weise mache ...

Intent secondActivity = new Intent(this, secondActivity.class); 
secondActivity.putExtra("myHashMap", dataHashMap); 
this.startActivity(secondActivity); 

dann in der zweiten Tätigkeit habe ich diesen Teil des Codes

secondActivity = getIntent(); 
    dataHashMap = (HashMap<String, 
    String>)secondActivity.getSerializableExtra("myHashMap"); 

und dann bin ich Wiederholung dieser oberen zwei Schritten für die dritte Aktivität. Ist das richtig? weil es ein wenig verwirrend und zeitaufwendig aussieht. Es gibt noch ein weiteres Problem. Wenn ich jetzt in der dritten Aktivität bin und zur zweiten oder ersten Aktivität zurückkehren möchte, überlasse ich immer eine HashMap, weil Aktivitäten diese Art von Daten erwarten. Gibt es eine Möglichkeit, manchmal zu einer vorherigen Aktivität zurückzukehren, aber keine Daten mehr zu übergeben (in meinem Fall HashMap), wenn sie nicht benötigt werden?

secondActivity.putExtra("myHashMap", dataHashMap); //- I would like to sometimes skip this step 

Ich habe versucht, unter diesem Code mit zu handhaben, aber es funktioniert nicht, meine Anwendung zu stoppen halten/abstürzt, weil zweite Aktivität Hashmap Daten aus der dritten Aktivität erwartet.

secondActivity = getIntent(); 
if(secondActivity != null){ 
    dataHashMap = (HashMap<String, 
    String>)secondActivity.getSerializableExtra("myHashMap"); 
} 

Vielen Dank für die Antworten, Grüße.

+0

Nein, es sei denn, Sie speichern in der App pref oder db. –

+0

@SouravGanguly Ich habe mysql-Datenbank, so dass ich die asynctask-Klasse zu jeder Aktivität hinzufügen sollte, wo ich einige Daten erhalten und diese Daten aus der Datenbank mit Hilfe von asynctask herunterladen soll, wenn ich etwas brauche? –

+0

Verwenden Sie die von greenrobot erstellte EventBus-Bibliothek –

Antwort

0

Sie können eine Variable verwenden, die innerhalb der Klasseninstanz Application platziert wird. Diese Variable wird für alle Aktivitäten und andere Elemente der Anwendung freigegeben.

0

Sie haben mehrere Möglichkeiten. Erstens haben Sie in einem Kommentar gesagt, dass Sie nur ein Element benötigen. In diesem Fall können Sie einfach das eine Element als "Extra" in der Intent übergeben, anstatt die gesamte HashMap zu übergeben.

Zweitens verstehe ich nicht, warum Sie von der dritten Activity auf die zweite Activity zurückrufen, indem Sie startActivity() anrufen. Sie sollten einfach finish() anrufen und das bringt Sie zum zweiten Activity zurück.

Wenn Sie einige Daten aus den dritten Activity zum zweiten Activity zurückkehren müssen, sollten Sie dritte ActivitystartActivityForResult() mit Start und den Datensatz in dritten Activity zurückzukehren setResult() verwenden und die Daten werden auf dem zweiten Activity in onActivityResult() zurückgeschickt werden.

Eine weitere Option ist es genau das zu tun, wie Sie es getan haben, sondern auch kopieren die hashMap in die Intent als „extra“ jedes Mal, wenn Sie startActivity() nennen. Wenn Sie nur eine Handvoll Einträge in der hashMap haben, wird es keinen merklichen Unterschied in der Leistung machen.