Facebook новый sdk - не может получить список друзей

1

Я использую новый 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 !!!

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

  • 0
    Нам понадобится немного кода ...
  • 0
    +1 половина за вопрос и половина за ваш дисплей рис :)
Теги:
facebook
facebook-android-sdk
facebook-fql

3 ответа

2
Лучший ответ

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

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

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

  • 0
    хорошо! .. как вы решаете проблему, что делать, если у вас так много информации о друзьях?
  • 0
    да .. это то, что нужно делать, когда список друзей слишком велик ... скорее всего, когда у него более 4000 друзей ...
Показать ещё 2 комментария
2

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

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;  
}
  • 0
    Можете ли вы сказать, что здесь взято? Это идентификатор FaceBook, который мы получили? Пожалуйста, предложите
  • 0
    Я получаю нулевое значение в вышеуказанном решении. Пожалуйста, дайте мне знать, в чем проблема с новым SDK facebook.
1

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

Загрузка информации о списке друзей.

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;
      }
  • 0
    спасибо за ваш ответ .. Я нашел проблему и решил ее .. Вы можете проверить мой ответ ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню