如何解析Android中从Facebook收到的捆绑数据?

时间:2013-05-11 07:40:00

标签: android facebook

我正在创建webDialog以便在facebook上发送好友请求。我可以创建网络对话框并发送好友请求,但我不知道要解析捆绑日期。一旦请求发送,如果没有错误,我将以下列方式获得facebook的响应 Bundle [{to [0] = 100005695389624,to [1] = 100002812207673,request = 333965433373671}] 。我想解析这些数据。我怎么能这样做。

我可以从上面的数据中获取request但是如何从中获取to参数。如果有人有任何想法,请告诉我。

我尝试了以下方式。

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

2 个答案:

答案 0 :(得分:8)

我正在创建WebDialog来邀请facebook的朋友。作为回应,我将以下列格式获取包中的值。

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

所以我在解析bundle的数据时遇到了问题。我以下面的方式解决了它。

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

希望这可以帮助某人。

答案 1 :(得分:2)

我不知道它是否可行,但尝试将to数组视为String。

   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++;
   }
}