getParcelableArrayListExtra问题。程序崩溃

时间:2011-12-03 18:21:04

标签: android android-activity arraylist

我试图将一个对象的arraylist传递给一个新的活动,我按照一个教程看起来好像我已经做好了一切,但我的程序一直在崩溃。我已经注释掉大部分代码来隔离似乎导致崩溃的行以及似乎是问题的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语句中。

1 个答案:

答案 0 :(得分:0)

当只是在意图之间传递数据时,您可以将您的类标记为Serializable(通过实现Serializable标记接口)并将它们作为额外内容直接添加到intent中,而无需使用parcelable完成所有这些工作(实际上只需要parcelable)绑定到服务时。)

很难说为什么在没有看到堆栈跟踪或使用包裹填充类的mydata的构造函数的情况下得到错误。