Austausch von Parameter-Daten (ArrayList von Objekten) zwischen 2 Activities

  • Antworten:5
  • Bentwortet
Wicki11
  • Forum-Beiträge: 103

15.12.2014, 13:05:29 via Website

Hallo,

QuizActivity startet per Intent MainActivityV3 und übergibt im Bundle eine ArrayList, die Objekte(Typ Frage) enthält. Diese werden in MainActivityV3 teilweise modifiziert und werden dann ebenfalls per Intent und Bundle mit der gleichen ArrayList zurückgegeben.
Hier ein Code-Ausschnitt.

//*** Frage.java
import java.io.Serializable;
public class Frage implements Serializable {
     static final long serialVersionUID = 242526L;
   String frage;
   String antworta;
   String antwortb;
   String antwortc;
   String antwortd;
   int loesung;
//es folgen getter- und setter-Methoden
   .
   .
}

//*** QuizActivity.java
  public Frage[] fragen;
  //Feld wird mit Frage-Objekten gefüllt
  .
  .
  void startInt() {
    Intent intent=new Intent(this,MainActivityV3.class);
    Bundle b = new Bundle();
    ArrayList mal=new ArrayList();
    for (Frage fr: fragen) {
        mal.add(fr); //Frage-Objekte -> ArrayList
    }
    b.putSerializable("key", mal);
    intent.putExtras(b);
    startActivityForResult(intent,0);
  }
  .
  .
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
     //alle 3 Parameter zeigen 0 bzw. null an
    if (resultCode == Activity.RESULT_OK) {
        Bundle daten = data.getExtras();
        frList=(ArrayList)daten.getSerializable("key");
        int i=0;
        for (Frage f: frList) {
            fragen[i++]=f;
        }
    }
    } 


//*** MainActivityV3.java
//hier werden die Daten der ArrayList modifiziert und sollen dann zurückgegeben
//werden.
//Die Daten kommen an, werden teilweise modifiziert und zurückgeschickt:
  @Override
  public void onBackPressed() {
    super.onBackPressed();
      Bundle b = new Bundle();
      Intent result=new Intent(MainActivityV3.this,QuizActivity.class);
      //mal: die obige ArrayList, im Debugger werden die Daten richtig angezeigt
      b.putSerializable("key", mal); 
      result.putExtras(b);
      this.setResult(Activity.RESULT_OK,result);
      finish();
  }

Das Problem: alle 3 Parameter in onActivityResult zeigen 0 bzw. null an.
Bitte um Hilfe.

Gruß Wicki

— geändert am 15.12.2014, 14:55:04

Antworten
pepperonas
  • Forum-Beiträge: 434

15.12.2014, 16:37:54 via Website

Probiere das:

b.putStringArrayList("key", mal);

das Array sollte so aussehen:

ArrayList<String> mal = new ArrayList<String>();

— geändert am 15.12.2014, 16:39:36

Open Source

Antworten
Wicki11
  • Forum-Beiträge: 103

15.12.2014, 17:10:19 via Website

Dank für Deine Antwort. Ich habe allerdings inzwischen mal testweise folgendes probiert, was in die Richtung Deines Vorschlags geht:

    String[] sa=new String[5];
    int i=0;
    int j=0;
    sa[i++]=(mal.get(j).antworta);
    sa[i++]=(mal.get(j).antwortb);
    sa[i++]=(mal.get(j).antwortc);
    sa[i++]=(mal.get(j).antwortd);
    sa[i++]=""+(mal.get(j).loesung);
  //Doku: Intent android.content.Intent.putExtra(String name, String[] value)
    result.putExtra("de.carpelibrum.quiz.erg", sa);

Leider hat sich am Ergebnis nichts geändert.

Gruß Wicki

Antworten
pepperonas
  • Forum-Beiträge: 434

15.12.2014, 18:22:05 via Website

Hast du meinen Code ausprobiert? Bin mir eigentlich ziemlich sicher, dass er funktioniert... :P

Open Source

Antworten
Wicki11
  • Forum-Beiträge: 103

15.12.2014, 18:23:18 via Website

Ich habe folgende Korrekturen in "onBackPessed" vorgenommen und jetzt läuft es erfolgreich:
- super.onBackPressed() auskommentiert
- Intent erzeugen ohne Parameter

Gruß Wicki

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.12.2014, 18:30:21 via Website

Hallo Wicki11,
wenn deine Frage beantwortet ist setzte deinen Thread bite noch auf "Beantwortet".
(Im Browser über deinem ersten Post auf "Mehr"-> " Beantwortet)

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten