Java 一个活动的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<

我完全是Java和Android编程的新手

我所拥有的是一个活动,点击一个按钮,它会启动一个不同的带有selectbox(facebook的friendpicker)的活动

我想做的是,在选择我想要的用户后,在第一个活动中显示他们。 作为第二个目标,我将尝试为每个用户创建一个按钮。但首先我只想从一个活动到另一个活动获取信息

我认为setResult()和onActivityResult()是我正确的选择。我不知道怎么做,为什么要做

在我的第二个活动中,它包含了我想要的所有用户:

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");