2

webDialogで友達リクエストを送信するために作成facebookしています。Web ダイアログを作成して友達リクエストを送信できますが、バンドルの日付を解析する方法がわかりません。リクエストが送信され、エラーがなければ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
4

2 に答える 2

8

WebDialogの友達を招待するために作成してfacebookいます。それに応じて、次の形式でバンドルの値を取得しています。

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

そのため、バンドルのデータの解析に問題がありました。次の方法で解決しました。

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

これが誰かを助けることを願っています。

于 2013-06-12T14:49:45.360 に答える
2

うまくいくかどうかはわかりませんが、 to 配列を単なる文字列として表示してみてください。

   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++;
   }
}
于 2013-05-11T08:57:45.440 に答える