2015-12-04 5 views
1

Мой график, похоже, работает нормально, у меня нет проблем с получением пользователя, который регистрирует имя и не имеет проблем с получением их идентификатора. Я пытаюсь сохранить изображение своего профиля для использования в моем приложении (загружая его как растровое изображение), но, похоже, он не смог его загрузить. Может ли кто-нибудь сказать мне, что я делаю неправильно?Извлечение Facebook Profile Picture

//Run the first time we log into Facebook 
    //connects everything here 
    private void firstTimeFBlogin() { 
     GraphRequest request = GraphRequest.newMeRequest(
       AccessToken.getCurrentAccessToken(), 
       new GraphRequest.GraphJSONObjectCallback() { 
        @Override 
        public void onCompleted(
          JSONObject object, 
          GraphResponse response) { 
         Log.i("joe", "Heyyyyo"); 

         try { 

          String userName = response.getJSONObject().getString("name"); 
          String userID = response.getJSONObject().getString("id"); 
          //String hi2 = response.getJSONObject().getString("first_name"); 
          //String hi3 = response.getJSONObject().getString("gender"); 


          final JSONObject mPicture = object.getJSONObject("picture"); 
          final JSONObject mPictureData = mPicture.getJSONObject("data"); 

          final String mImageUrl = mPictureData.getString("url"); 

          Log.i("joe", "User's Facebook Name: " + userName); 
          Log.i("joe", ParseUser.getCurrentUser().getUsername()); 
          Log.i("joe", mImageUrl); 
          Log.i("joe", userID); 
          ParseUser.getCurrentUser().put("name", userName); 
          ParseUser.getCurrentUser().put("iUrl", mImageUrl); 
          ParseUser.getCurrentUser().put("fbID", userID); 

          ParseUser.getCurrentUser().saveInBackground(); 

          profilePictureRetriever(userID); 

         } catch (JSONException e) { 
          Log.i("joe", "Couldn't Succesfully retrieve the stuff..."); 
          e.printStackTrace(); 
         } 

        } 
       }); 
     Bundle parameters = new Bundle(); 
     parameters.putString("fields", "id,name,link,picture"); 
     request.setParameters(parameters); 
     request.executeAsync(); 


    } 


    public void profilePictureRetriever(String id) { 
     Log.i("joe", "Profile Picture Checker"); 
     //Bitmap bitmap = getFacebookProfilePicture(id); 

     //this is here for test purposes 
//tried just maually putting the url in.. 
     Bitmap bm = DownloadImageBitmap("https://graph.facebook.com/849993771766163/picture?type=square"); 

    } 

    public static Bitmap DownloadImageBitmap(String url) { 
     Bitmap bm = null; 
     try { 
      URL aURL = new URL(url); 
      URLConnection conn = aURL.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      bm = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      is.close(); 
     } catch (IOException e) { 
      Log.e("IMAGE", "Error getting bitmap", e); 
     } 
     return bm; 
    } 




} 

Есть ли другой/лучший способ сделать это?

Большое спасибо!

ответ

1

Update

Pass необходимый параметр в пачке, а id,name,email,gender, birthday,picture передается в приведенном ниже коде.

LoginManager.getInstance().registerCallback(callbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         // App code 
         GraphRequest request = GraphRequest.newMeRequest(
           loginResult.getAccessToken(), 
           new GraphRequest.GraphJSONObjectCallback() { 
            @Override 
            public void onCompleted(
              JSONObject object, 
              GraphResponse response) { 

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

        @Override 
        public void onCancel() { 
         Log.e(TAG, "Cancel"); 
        } 

        @Override 
        public void onError(FacebookException exception) { 
         Log.e(TAG, "Error"); 
         Log.e(TAG, exception.toString()); 
        } 
       }); 

Старый Ответ

получить его по телефону

graph.facebook.com/<FB UserId>/picture?type=large 
+0

больше не доступны – bphilipnyc

3

я сделал что-то вроде этого:

Прежде всего, необходимо позвонить GraphRequest API для получения всех деталей пользователя в котором API также дает URL of current Profile Picture.

Bundle params = new Bundle(); 
params.putString("fields", "id,email,gender,cover,picture.type(large)"); 
new GraphRequest(token, "me", params, HttpMethod.GET, 
     new GraphRequest.Callback() { 
      @Override 
      public void onCompleted(GraphResponse response) { 
       if (response != null) { 
        try { 
         JSONObject data = response.getJSONObject(); 
         if (data.has("picture")) { 
          String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url"); 
          Bitmap profilePic = getFacebookProfilePicture(profilePicUrl); 
          // set profilePic bitmap to imageview 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
}).executeAsync(); 

Вы можете использовать этот метод, который возвращает текущее изображение Профиль пользователя от URL, который мы получаем из выше GraphRequest API.

public static Bitmap getFacebookProfilePicture(String url){ 
    Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
    return bitmap; 
} 

Надеюсь, это поможет!

+0

Хм, в строке: Bitmap растровый = BitmapFactory.decodeStream (. Url.openConnection() getInputStream()); Кажется, я не нашел метод openConnection(); –

+0

DId вы пишете это или есть то, что в библиотеке? –

+0

Да, возможно, этот способ не работает, есть ли что-то, что я должен был импортировать? –

0

следующий код ставится после успешного использования.

GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback() { 
            @Override 
            public void onCompleted(JSONObject object,GraphResponse response) { 
              Log.d("info",object.toString()+""); 
              String id = object.getString("id"); 
              String profilePic ="http://graph.facebook.com/"+id+"/picture"; 
             } 
            }); 
            Bundle parameters = new Bundle(); 
            parameters.putString("fields", "id,name,first_name,last_name,age_range,gender,locale,timezone,updated_time,verified,email"); 
            request.setParameters(parameters); 
            request.executeAsync();