我正在尝试使用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);
}
答案 0 :(得分:1)
问题是您的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));
答案 1 :(得分:1)
要解决您的问题,您可以使用putParcelableArrayListExtra()
类中定义的getParcelableArrayListExtra()
和Intent
方法。
1.确保您的GetReminder
班级实施Parcelable
。
Here是Parcelable
的文档,它还包含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。