Vorbei ArrayList von Objekten, die durch Vorsatz - Java (Android)
Ich versuche an einem ArrayList mit Objekten, die durch eine Absicht, aber kann es nicht funktionieren. Hier ist, was ich habe:
public class QuestionView extends Activity {
//variables and other methods...
public void endQuiz() {
Intent intent = new Intent(QuestionView.this, Results.class);
intent.putExtra("correctAnswers", correctAnswers);
intent.putExtra("wrongAnswers", wrongAnswers);
intent.putParcelableArrayListExtra("queries", queries);
startActivity(intent);
}
}
Intents empfangen werden hier:
public class Results extends Activity {
int cAnswers;
int wAnswers;
ArrayList<Question> qs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.resultsmain);
cAnswers = getIntent().getIntExtra("correctAnswers", -1);
wAnswers = getIntent().getIntExtra("wrongAnswers", -1);
qs = getIntent().getParcelableArrayListExtra("queries");
//more code...
}
}
Den zwei ints, correctAnswer und wrongAnswers, empfangen werden und ich Sie verwenden können. Die ArrrayList kommt nicht durch. Keine Fehler in der endQuiz () - Methode, aber der 'qs = getIntent().getParcelableArrayListExtra("Abfragen");' wirft einen Fehler und sagen, "Bound Mismatch."
Jede Hilfe zu diesem wird sehr geschätzt!
Frage Klasse:
public class Question {
String a1;
String a2;
String a3;
String a4;
int correctAnswer;
String query;
int selectedAnswer;
boolean correctness;
public Question() {
}
public Question(String a1, String a2, String a3, String a4, int correctAnswer, String query, int selectedAnswer, boolean correctness) {
this.a1 = a1;
this.a2 = a2;
this.a3 = a3;
this.a4 = a4;
this.correctAnswer = correctAnswer;
this.query = query;
this.selectedAnswer = selectedAnswer;
this.correctness = correctness;
}
}
Hat Ihr
Nein ... das ist, warum er ist casting ...
Können wir sehen, was der Typ von Ihr Abfragen ArrayList tatsächlich aussieht? Ich meine, die Klasse...
aber er ist nicht immer class cast exception, die neugierig ist...
java generics ... ähnlicher code wird nicht kompilieren, in C#, aber in java ...
Question
Klasse implementieren Parcelable?Nein ... das ist, warum er ist casting ...
(ArrayList<? extends Parcelable>) queries);
🙂 das wird sicherlich nicht helfenKönnen wir sehen, was der Typ von Ihr Abfragen ArrayList tatsächlich aussieht? Ich meine, die Klasse...
aber er ist nicht immer class cast exception, die neugierig ist...
java generics ... ähnlicher code wird nicht kompilieren, in C#, aber in java ...
ArrayList<Object> a = null; ArrayList<? extends Parcelable> b = (ArrayList<? extends Parcelable>) a;
funktioniert ... nur mit warrning Unchecked cast from ArrayList<Object> to ArrayList<? extends Parcelable>
.... in java zur Laufzeit wissen Sie nicht generischen TypInformationsquelleAutor Matt | 2012-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ändern Sie Ihre
Question
Klasse tatsächlich Parcelable implementieren. Die Parcelable-Schnittstelle kann zunächst verwirrend sein... aber dort hängen.Gibt es zwei Parcelable Methoden, die Sie sich konzentrieren sollten:
writeToParcel()
konvertiert Ihre Klasse in ein Paket-Objekt.Question(Parcel in)
wandelt ein Paket-Objekt wieder in nutzbare Instanz der Klasse.Können Sie sicher cut & paste die anderen Parcelable Informationen, die ich gekennzeichnet.
Gründen der Einfachheit werde ich nur einen Teil für deine Frage Klasse:
Nun ändern, wie du
queries
in Ihrer Absicht extras.Dem Weg, Lesen Sie das Parcelable-array ist perfekt so wie es ist.
Sie wollen nur pass eine ArrayList von Fragen, so dass nur die Frage der Klasse sollte Parcelable implementieren
Oh Mann, es funktioniert! Dies ist die am weitesten ich habe in den 2 Monaten habe ich auf dieses Ziel hingearbeitet. Großer Meilenstein heute! Nochmals vielen Dank Sam. 🙂
wie Paket eine bitmap?
InformationsquelleAutor Sam
Um der Lage sein zu liefern eine ArrayList als Bestandteil einer Absicht, Ihr Typ muss Parcelable implementieren. Die Beurteilung durch die Tatsache, dass Sie hatte, zu werfen Sie Ihre Liste, um
(ArrayList<? extends Parcelable>)
Sie das nicht tun. Wenn Sie musste, konnte Sie einfach haben:InformationsquelleAutor LuxuryMode