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



我正试图使用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);
            }

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

1.确保您的GetReminder类实现了Parcelable

这是Parcelable的文档,它还包含了Parcelable的典型实现。

这里有一个网站,可以帮助您自动生成类的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");

顺便说一句,还有另一种方法可以解决你的问题,你可以在这里参考我的答案。

问题是您的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));

相关内容

  • 没有找到相关文章