Java 一个活动的setResult()与另一个活动的onActivityResult()之间的通信
我完全是Java和Android编程的新手 我所拥有的是一个活动,点击一个按钮,它会启动一个不同的带有selectbox(facebook的friendpicker)的活动 我想做的是,在选择我想要的用户后,在第一个活动中显示他们。 作为第二个目标,我将尝试为每个用户创建一个按钮。但首先我只想从一个活动到另一个活动获取信息 我认为setResult()和onActivityResult()是我正确的选择。我不知道怎么做,为什么要做 在我的第二个活动中,它包含了我想要的所有用户:Java 一个活动的setResult()与另一个活动的onActivityResult()之间的通信,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,我完全是Java和Android编程的新手 我所拥有的是一个活动,点击一个按钮,它会启动一个不同的带有selectbox(facebook的friendpicker)的活动 我想做的是,在选择我想要的用户后,在第一个活动中显示他们。 作为第二个目标,我将尝试为每个用户创建一个按钮。但首先我只想从一个活动到另一个活动获取信息 我认为setResult()和onActivityResult()是我正确的选择。我不知道怎么做,为什么要做 在我的第二个活动中,它包含了我想要的所有用户: List<
List<GraphUser> friendList = friendPickerFragment.getSelection();
我如何将我的GraphUser对象列表纳入此意图
然后,在我的第一个活动(当然称为第二个)中,我有一个关于activityresult的结果,我如何再次得到一个脱离意图的列表
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> ?
}
}
activityresult上的公共void(int-requestCode、int-resultCode、Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
if(请求代码==重新授权活动代码){
onActivityResult(请求代码、结果代码、数据);
}else if(resultCode==Activity.RESULT\u OK){
//要列出的意向数据?
}
}
还是我完全错了?我检查了文档,不幸的是GraphUser无法序列化。您可以在调用setResult之前将列表转换为列表:
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();
List tmpList=new ArrayList();
对于(GraphUser tmp:friendList){
添加(tmp.getInnnerJSONObject().toString());
}
意图=新意图();
意向。额外(“列表”,tmpList);
设置结果(结果正常,意图);
完成();
在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);
}
}
else if(resultCode==Activity.RESULT\u OK){
List tmpList=intent.getExtra(“List”);
列表=新的ArrayList();
for(字符串tmpString:tmpList){
GraphUser=(GraphUser)GraphObject.Factory.create(新的JSONObject(tmpString),GraphUser.class);
列表。添加(用户);
}
}
检查键入/空值/正确转换您不能仅在
意图
对象中转换列表。相反,您必须将其放入:
Intent intent = new Intent();
intent.putExtra("foobar", friendListToPlay);
setResult(RESULT_OK, intent);
finish();
回到您的第一个活动:
List<GraphUser> friendListToPlay = (Serializable) intent.getSerializableExtra("foobar");
List-friendListToPlay=(可序列化)intent.getSerializableTextra(“foobar”);
显然,
GraphUser
类必须实现Serializable
接口。如果不是这种情况,只需存储它的字符串
表示,例如使用JSON。如果您想保留相同的引用,并且如果序列化是您的问题,您也可以使用应用程序对象来传输数据。谢谢,这几乎完美无瑕。对于将来的引用,可能需要进行一些更正:intent.putStringArrayListExtra而不是intent.putExtra,List List=new ArrayList();而不是列表=新列表();和user=(GraphUser)GraphObject.Factory.create(新JSONObject(tmpString),GraphUser.class);而不是user=(GraphUser)GraphObject.Factory.create(newjsonobject(tmpString));但在这一点上,这只是一些小事情要解决,再次感谢您的帮助!
List<GraphUser> friendListToPlay = (Serializable) intent.getSerializableExtra("foobar");