我是Java和Android编程的新手。
我所拥有的是一个活动,点击一个按钮后,它会启动一个与selectbox(facebook的friendpicker)不同的活动。
我想要做的是,在选择我想要的用户后,在第一个活动中显示它们。 作为第二个目标,我会尝试为每个用户创建一个按钮。但首先我只是将信息从一个活动传递到另一个活动。
我认为setResult()和onActivityResult()将是我正确的选择。我不知道如何以及为什么要这样做。
所以在我的第二个活动中,这包含了我想要的所有用户:
List<GraphUser> friendList = friendPickerFragment.getSelection();
但这显然不起作用:
setResult(RESULT_OK, (Intent) friendListToPlay);
finish();
如何将我的GraphUser对象列表添加到此意图中?
然后在我的第一个活动(当然称为第二个活动)我有onActivityResult,我如何再次从Intent中获取List?
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REAUTH_ACTIVITY_CODE) {
uiHelper.onActivityResult(requestCode, resultCode, data);
} else if (resultCode == Activity.RESULT_OK) {
// Intent data to List<GraphUser> ?
}
}
或者我完全错了吗?
答案 0 :(得分:4)
我检查了文档,遗憾的是GraphUser不可序列化。你可以做的是在调用setResult之前从List转换为List:
List<String> tmpList = new ArrayList<String>();
for (GraphUser tmp : friendList) {
tmpList.add(tmp.getInnnerJSONObject().toString());
}
Intent intent = new Intent();
intent.putExtra("list", tmpList);
setResult(RESULT_OK, intent);
finish();
在onActivityResult上,您可以回读数据:
else if (resultCode == Activity.RESULT_OK) {
List<String> tmpList = intent.getExtra("list");
List<GraphUser> list = new ArrayList<GraphUser>();
for (String tmpString : tmpList) {
GraphUser user = (GraphUser) GraphObject.Factory.create(new JSONObject(tmpString), ,GraphUser.class);
list.add(user);
}
}
检查typo/null values/correct cast
答案 1 :(得分:1)
您不能只在Intent
对象中投射列表。相反,你必须把它放在:
Intent intent = new Intent();
intent.putExtra("foobar", friendListToPlay);
setResult(RESULT_OK, intent);
finish();
回到你的第一个活动:
List<GraphUser> friendListToPlay = (Serializable) intent.getSerializableExtra("foobar");
显然GraphUser
类必须实现Serializable
接口。如果不是这种情况,只需存储String
表示形式,例如使用JSON。
答案 2 :(得分:0)
如果您想保留相同的引用并且序列化对您来说是个问题,您也可以使用Application对象来传输数据。