Facebook новый sdk - не может получить список друзей - PullRequest
1 голос
/ 18 ноября 2011

Я использую новый Facebook-sdk и пример с hackbook, чтобы получить список друзей, использующих файл FriendsList.java. Friendlist Activity убивается каждый раз, и я получаю эту ошибку в logcat:

11-18 16:20:51.141: ERROR/JavaBinder(7881): !!! FAILED BINDER TRANSACTION !!!.

Эта проблема воспроизводима каждый раз. Обратите внимание, что количество друзей в профиле 4500.

11-18 16:19:27.932: DEBUG/Facebook-Util(7881): GET URL: https://api.facebook.com/restserver.php?access_token=**********&query=select+name%2C+current_location%2C+uid%2C+pic_square+from+user+where+uid+in+%28select+uid2+from+friend+where+uid1%3Dme%28%29%29+order+by+name&method=fql.query&format=json

11-18 16:20:50.982: WARN/InputManagerService(3426): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4665a200
11-18 16:20:51.141: ERROR/JavaBinder(7881): !!! FAILED BINDER TRANSACTION !!!

Пожалуйста, помогите!

Ответы [ 3 ]

3 голосов
/ 19 ноября 2011

Я не опубликовал никакого кода, потому что я использовал пример кода Facebook SDK, доступного на Facebook - пример Hackbook для Android. Наконец я нашел проблему и решил ее.

Во-первых, проблема не в Facebook SDK, а в размере ответа. Если у вас более 4 тыс. Друзей в Facebook и вы запрашиваете список друзей, используя методы fql.query или graph , тогда размер ответа Json составляет более 500 КБ. Теперь, если вы попытаетесь передать этот ответ 500 КБ через IPC (Намерение дополнительных данных) другому действию, процесс завершится неудачно с причиной !! Неудачная операция связывания !! Дополнительную информацию о транзакции невыполненного связующего можно найти по адресу Обсуждение транзакции невыполненного связующего

Как я решил эту проблему: Я использовал ту же процедуру, что и в ссылке, которую я разместил выше. То есть запись ответа в файл и отправка ссылки на файл другому действию вместо полного ответа размером 500 КБ.

2 голосов
/ 18 февраля 2012

Следующий код работает лучше для меня.Этот код предоставляет список друзей.

public JSONObject getFrienList(String token)
{
    InputStream is = null;
    String result = "";
    JSONObject jArray = null;
    try
    {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httppost = new HttpGet("https://graph.facebook.com/me/friends?      access_token=" + token);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    }
    catch(Exception e)
    {
        Log.e("ERROR", "Error in http connection "+e.toString());
    }
    //convert response to string
    try
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is),8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) 
        {
            sb.append(line + "\n");
        }
        is.close();
        result=sb.toString();
        Log.i("RESULT",result);
    }
    catch(Exception e)
    {
            Log.e("ERROR", "Error converting result "+e.toString());
    }

    //try parse the string to a JSON object
    try
    {
        jArray = new JSONObject(result);
        Log.i("RESULT","JSON ARRAY"+jArray.toString());
    }
    catch(JSONException e)
    {
            Log.e("ERROR", "Error parsing data "+e.toString());
    }

    return jArray;  
}
1 голос
/ 19 ноября 2011

Что вы делаете сейчас, я не знаю .. потому что вы не опубликовали код .. но так я получил список друзей.

Чтобы загрузить информацию о списке друзей.

HttpGet httpget = new HttpGet("https://graph.facebook.com/me/friends?access_token=" + mAccessToken); 
        HttpResponse response;
        try
        {
             response = httpclient.execute(httpget);
                HttpEntity entity = response.getEntity();
                if (entity != null)
                {
                    result = EntityUtils.toString(entity);
                    Log.i("Request String",result);
                    parseJSON(result);
                }
        }
        catch (Exception e) {
            e.printStackTrace();
        }

Разобрать детали друга

 private void parseJSON(String data1)
        {
        try{
                JSONObject jObj = new JSONObject(data1);if(jObj==null) Log.i("-----------","JOBJ IS NULL");
                JSONArray jObjArr= jObj.optJSONArray("data");if(jObjArr==null) Log.i("-----------","JOBJARR IS NULL");
                    int lon = jObjArr.length();
                    String  frnd_data[][] = new String[jObjArr.length()][2];
                    entity1 = new String[jObjArr.length()];
                    Log.i("Frineds >>", "" + lon);
                    for(int i = 0 ;i< lon; i++)
                        {
                          JSONObject tmp = jObjArr.optJSONObject(i);
                          frnd_data[i][0]=tmp.getString("name");
                          frnd_data[i][1]=tmp.getString("id");
                          Log.i("Name", frnd_data[i][0]);
                          Log.i("Name AND Id" , frnd_data[i][0] +"  "+ frnd_data[i][1]);
                          entity1[i] = getFriend("https://graph.facebook.com/"+frnd_data[i][1]+"?access_token="+mAccessToken);
                        }
            }
            catch (Exception e)
            {
                Log.i("Exception1 >> ", e.toString());
            }
        }
      public String getFriend(String tmpurl) 
      {
          HttpClient httpclient = new DefaultHttpClient();
          String temp_result = null;
            HttpGet httpget = new HttpGet(tmpurl); 
            HttpResponse response;
            try
            {
                 response = httpclient.execute(httpget);
                    HttpEntity entity = response.getEntity();
                    if (entity != null)
                    {
                        temp_result = EntityUtils.toString(entity);
                        Log.i("Request String",temp_result);
                        return temp_result;
                    }
            }
           catch (Exception e) 
           {
             e.printStackTrace();
           }
           return temp_result;
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...