2013-05-11 110 views
2

我正在创建webDialog用于发送朋友请求facebook。我能够创建网页对话框并发送好友请求,但我不知道要解析绑定日期。一旦请求发送,如果没有错误,我会得到facebook以下列方式响应Bundle [{to [0] = 100005695389624,to [1] = 100002812207673,request = 333965433373671}]。我想解析这些数据。我该如何解决这个问题。如何解析android中从facebook接收到的绑定数据?

我可以从上面的数据得到request,但我怎样才能得到它的to参数。如果任何人有任何想法,请让我知道。

我尝试了以下方式。

final String requestId = values.getString("request"); // This value retrived properly. 
char at[] = values.getString("to").toCharArray(); // returns null 
String str[] = values.getStringArray("to");  // returns null 
String s = values.getString("to");    // return null 

感谢advanse。

回答

8

我邀请的朋友facebook。在那反应,我在下面的格式获得在包中的值创建WebDialog

Bundle[{to[0]=10045667789624, to[1]=1353002812207673, request=1234555}]

在bundle.I的分析数据所以我是有问题通过以下方式解决它。

Bundle params = new Bundle(); 
params.putString("message", "Message from Android App."); 

WebDialog requestsDialog = (
      new WebDialog.RequestsDialogBuilder(ChatRoom.this, 
       Session.getActiveSession(), 
       params)) 
       .setOnCompleteListener(new OnCompleteListener() { 

        @Override 
        public void onComplete(Bundle values,FacebookException error) { 

         if(values != null) 
         { 
          final String requestId = values.getString("request"); 
          ArrayList<String> friendsId = new ArrayList<String>(); 

          int i = 0; 
          String to; 

          do { 

           to = values.getString("to[" +i + "]"); 

           if(!TextUtils.isEmpty(to)) 
           { 
            friendsId.add(to); 
           } 

           i++; 

          } while (to != null); 

          if (requestId != null) { 

           Toast.makeText(ChatRoom.this.getApplicationContext(),"Request sent",Toast.LENGTH_SHORT).show(); 
          } 

          else { 

           Toast.makeText(ChatRoom.this.getApplicationContext(),"Request cancelled",Toast.LENGTH_SHORT).show(); 
          } 
         } 
         toggle(); 
        } 
       }) 
       .build(); 

     requestsDialog.show(); 

希望这可以帮助某人。

2

我不知道它是否会工作,但尝试查看数组作为一个字符串。

final String requestId = values.getString("request"); 
    final String to0 = values.getString("to[0]"); 
    final String to1 = values.getString("to[1]"); 

如果你不知道你有多少这些字符串,你可以创建一个简单的while循环并继续,直到它返回null。这不是一个优雅的解决方案,但它是我现在可以提出的唯一解决方案。如果你更了解这个软件包,你可能会找到更好的解决方案。

ArrayList<String> to = new ArrayList<String>(); 
int i = 0; 
while (true) { 
    String x = values.getString("to["+i+"]"); 
    if (x == null) { 
     break; 
    } else { 
     to.add(x); 
     i++; 
    } 
} 
+0

感谢您的答复,但我越来越'''参数动态,即我不知道该数组的大小,所以不会在运行时工作:( – Akshay 2013-05-11 09:07:46

+0

但它确实工作? – 2013-05-11 09:10:42

+0

但它没有用,因为我不知道这个数组的大小,所以我怎么才能识别出有多少用户发送了请求。 – Akshay 2013-05-11 10:37:06