我正试图使用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;
不是字符串列表。
要传递自定义对象列表,您必须将自定义类设置为Serializable
或Parcelable
。在您的情况下,将GetReminder
设为Serializable
或Parcelable
。
然后使用Intent的putExtra()
或putSerializable()
传递Serializable对象。
还有一些我从你的onPostExecute()
中注意到的傲慢代码,因为你已经写了
startActivity(new Intent(getApplicationContext(), ReminderActivity.class));
startActivity(reminderIntent);
将导致创建两个活动实例。
所以去掉第一个
startActivity(new Intent(getApplicationContext(), ReminderActivity.class));