在OnPostExecute中将Arraylist数据从一个活动传递到另一个活动

时间:2015-03-20 15:02:59

标签: android

我正在尝试使用OnPostExecute方法中的Bundles将arraylist从一个活动传递到其他活动,我无法这样做。我也没有得到正确的错误来进行类型转换或做些删除错误的东西。我不确定是什么这里错了。

   ***here reminderList is List<GetReminder> reminderList;***

private class AsyncCallWS extends AsyncTask<String, Void, Void> {
            @Override
            protected Void doInBackground(String... params) {
                //Invoke webservice
                vaildUserId=WebService.invokeAuthenticateUserWS(loginUserName, loginPassword, "AuthenticateUser");
                if(vaildUserId>=0){
                    reminderList=WebService.invokeHelloWorldWS("GetReminder");
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                Bundle bundle = new Bundle();
                bundle.putStringArrayList("reminderList", reminderList);
                reminderIntent.putExtras(bundle);
                startActivity(new Intent(getApplicationContext(), ReminderActivity.class));
                startActivity(reminderIntent);
            }

2 个答案:

答案 0 :(得分:1)

问题是您的List<GetReminder> reminderList;不是字符串列表。

要传递自定义对象列表,您必须将自定义类设为SerializableParcelable。在您的情况下,将GetReminder设为SerializableParcelable

然后使用Intent的putExtra()putSerializable()来传递Serializable对象。

我在你写的onPostExecute()时也注意到了一些傲慢的代码

startActivity(new Intent(getApplicationContext(), ReminderActivity.class));
startActivity(reminderIntent);

将导致创建两个活动实例。

所以删除第一个,

startActivity(new Intent(getApplicationContext(), ReminderActivity.class));

答案 1 :(得分:1)

要解决您的问题,您可以使用putParcelableArrayListExtra()类中定义的getParcelableArrayListExtra()Intent方法。

1.确保您的GetReminder班级实施Parcelable

HereParcelable的文档,它还包含Parcelable的典型实现。

Here是一个可以帮助您自动生成类的Parcelable实现的网站。

2.在你的onPostExecute()方法中加上这样的额外内容:

//Remember to declare reminderList as ArrayList here.
ArrayList<GetReminder> reminderList = ...;

Intent intent = new Intent(getApplicationContext(), ReminderActivity.class);
intent.putParcelableArrayListExtra("reminderList", reminderList);
startActivity(intent);

然后在ReminderActivity课程中获取ArrayList这样的内容:

ArrayList<GetReminder> list = getIntent().getParcelableArrayListExtra("reminderList");
顺便说一下,还有另一种解决问题的方法,你可以参考我的答案here