2014-11-22 2 views
0

Я новичок в кодировании Android, и я пытаюсь получить доступ к ленте новостей и дисплею facebook в списке. Я аутентифицировал пользователя с помощью виджета кнопки facebook в одном действии и передал сеанс следующей активности. Сессия проходит правильно, но когда я пытаюсь получить ответ на запрос для фида новостей и сохранить его в GraphObject, он возвращает null.Объект Graph возвращает null при попытке получить доступ к ленте новостей Facebook.

Это то, что я пробовал:

new Request(
      userSession, 
      "/me/home", 
      null, 
      HttpMethod.GET, 
      new Request.Callback() { 
       public void onCompleted(Response response) { 
        try 
        { 
         GraphObject newsFeed = response.getGraphObject(); 
         JSONObject jsonObj=newsFeed.getInnerJSONObject(); 
         JSONArray jsonArr = jsonObj.getJSONArray("data"); 
         for(int i=0;i<jsonArr.length();i++) 
         { 
          JSONObject jsonObj1=jsonArr.getJSONObject(i); 
          strings.add(jsonObj1.getString("id")); 
         } 
        } catch (JSONException e) 
        { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
} 
      } 
     ).executeAsync(); 
} 

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

ответ

1

Убедитесь, что:

1. вы правильно сгенерировал приложение-идентификатор с OpenSSL и объявили его в манифесте приложения.

2. имя приложения и идентификатор приложения правильно введены на странице сведений о приложении Facebook.

3. Вы подали заявку на получение соответствующих разрешений и получили их от FB.

4. действительный токен доступа (то есть не нуль).

5. ОТКРЫТО состояние сеанса доступа к токену.

+0

Большое спасибо за ответ сэр , Ошибка заключалась в асинхронных задачах. Я поместил отдельную функцию для заполнения списка и вызвал внутри, получая объект JSON. Работаю сейчас. – user2671899

+0

сэр, вы можете посмотреть на это на досуге. Я последовал за всеми вами упомянутыми вами ответами. http://stackoverflow.com/questions/27119346/strange-behaviour-of-graph-object-while-retrieving-facebook-news-feed – user2671899

0

Несколько раз проблема с устаревшим параметром переходит в GraphRequest, поэтому, чтобы найти его, напишите код проверки ошибки facebook в GraphRequest здесь. Я пишу полный метод с именем makeMeRequest (Accesstoken accesstoke). Здесь токен доступа предоставляется facebook так что вы должны передать ей при вызове этого метода ..йтесь код для этого метода

private void makeMeRequest(AccessToken accesstoken) {   

      GraphRequest request = GraphRequest.newMeRequest(accesstoken, new GraphRequest.GraphJSONObjectCallback() { 
        @Override 
        public void onCompleted(JSONObject object, GraphResponse response) { 

       FacebookRequestError facebookRequestError = response.getError(); 
         if (facebookRequestError != null) { 
          Log.e("Error", facebookRequestError + ""); 
         } 
         try { 

          System.out.println("GraphRequest response----" + object); 
          System.out.println("GraphRequest response----" + object.getString("name")); 
          System.out.println("GraphRequest response----" + object.getString("email")); 

         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
         HashMap<String, String> fb_data = new HashMap<String, String>(); 
         try { 
          fb_data.put("name", object.getString("name")); 
         } catch (Exception e) { 
          fb_data.put("name", ""); 
         } 
         try { 
          fb_data.put("id", object.getString("id")); 
         } catch (Exception e) { 
          fb_data.put("id", ""); 
         } 
         try { 
          fb_data.put("email", object.getString("email")); 
         } catch (Exception e) { 
          fb_data.put("email", ""); 
         } 

         try { 
          fb_data.put("dob", object.getString("dob")); 
         } catch (Exception e) { 
          fb_data.put("dob", ""); 
         } 
         pdialog.show(); 
         if (fb_data.get("email").equalsIgnoreCase("") || fb_data.get("email") == null) { 
          checkSocialMedia("facebook", fb_data); 
         } else { 
          LoginProcess(fb_data, "facebook"); 
         } 

        } 

       }); 
       Bundle parameters = new Bundle(); 
       parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name"); 
       request.setParameters(parameters); 
       request.executeAsync(); 
      } 

в этом методе вы можете увидеть код этого код будет возвращать ошибку, и вы получите знать о сообщение об ошибке, и вы можете управлять им

FacebookRequestError facebookRequestError = response.getError(); 
    if (facebookRequestError != null) { 
         Log.e("Error", facebookRequestError + ""); 
        } 

Но если ошибка относится к устаревшему параметру, переданному в объект запроса графа, тогда проверьте его, поскольку он устарел, и если он устарел, он будет печататься в сообщении об ошибке facebook, и вам нужно удалить его из параметра ... Вот код объекта запроса графа от метода makeMeRequest()

Bundle parameters = new Bundle(); 
     parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name"); 
     request.setParameters(parameters); 
     request.executeAsync(); 

Вам просто нужно удалить этот параметр из

parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name"); 

И ваш фб логин интеграционной работы тонкой