I am trying to pass an ArrayList of objects through an intent but cannot get it to work. Here is what I have:
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 are being received here:
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...
}
}
The two ints, correctAnswer and wrongAnswers, are being received and I can use them. The ArrrayList is not coming through. No errors on in the endQuiz() method but the 'qs = getIntent().getParcelableArrayListExtra("queries");' is throwing an error and saying "Bound Mismatch."
Any help on this is appreciated!
Question class:
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;
}
}
You must change your
Question
class to actually implement Parcelable. The Parcelable interface can be confusing at first... but hang in there.There are two Parcelable methods that you should focus on:
writeToParcel()
which converts your class into a Parcel object.Question(Parcel in)
which converts a Parcel object back into usable instance of your class.You can safely cut & paste the other Parcelable information that I marked.
For the sake of simplicity I will only use part of your Question class:
Now change how you put
queries
into your Intent extras.The way you read the Parcelable array is perfect as it is.
In order to be able to deliver an ArrayList as part of an Intent, your type must implement Parcelable. Judging by the fact you had to cast your List to
(ArrayList<? extends Parcelable>)
, you didn't do this. If you had, you could simply have: