Я пытаюсь передать массив объектов для нового действия, я следовал учебному пособию, и похоже, что я все сделал правильно, но моя программа продолжала падать.Я закомментировал большую часть кода, чтобы изолировать строку, которая, кажется, вызывает сбой, и ее бит getParcelableArrayListExtra, который, кажется, является проблемой.Кто-нибудь может помочь?
Новое действие:
public class DatabaseSearch extends ListActivity{
DBAdapter db = new DBAdapter(this);
ArrayList<String> listrecipes = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.databasesearch);
Intent i = getIntent();
if (i != null) {
ArrayList<mydata> data = i.getParcelableArrayListExtra ("com.example.MyPantry.array");
}
}
}
Бит кода из старого действия - я не знаю, имеет ли это значение, но новое действие вызывается в диалоговом окне
@Override
protected Dialog onCreateDialog(int id)
{
switch(id) {
case 0:
return new AlertDialog.Builder(this)
.setIcon(R.drawable.icon)
.setTitle("List all recipes that match over:")
.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
// TODO Auto-generated method stub
switch (item)
{
case 0:
percentageselected = 25;
break;
case 1:
percentageselected = 50;
break;
case 2:
percentageselected = 75;
break;
case 3:
percentageselected = 100;
break;
default:
break;
}
}
})
.setPositiveButton("OK", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton)
{
if (percentageselected == 0)
{
Toast.makeText(getBaseContext(), "Please make a selection", Toast.LENGTH_SHORT).show();
}
else
{
Intent intent = new Intent(getBaseContext(), DatabaseSearch.class);
intent.putParcelableArrayListExtra("com.example.MyPantry.array", array);
startActivity(intent);
}
}
})
.setNegativeButton("Cancel", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton)
{
dialog.dismiss();
}
})
.create();
}
return null;
}
Мои объекты внутри массива, который я хочу передать -
public class mydata implements Parcelable {
private int recipeID;
private int ingredientID;
private String check = "unchecked";
private int percentage = 0;
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel data, int flags) {
// TODO Auto-generated method stub
data.writeInt(recipeID);
data.writeInt(ingredientID);
data.writeString(check);
data.writeInt(percentage);
}
//Other functions
}
Наконец, у меня есть этот класс, который учебник дал мне указание сделать ...
public class MyCreator implements Parcelable.Creator<mydata> {
@Override
public mydata createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new mydata(source);
}
@Override
public mydata[] newArray(int arg0) {
// TODO Auto-generated method stub
return new mydata[arg0];
}
}
Так что я знаю, что на это немного, но я просто стараюсь быть тщательным.Проблема начинает возникать внутри оператора if в новом действии.