2014-10-26 2 views
2

В моем приложении я позволяю пользователям загружать фотографии из Facebook. Поэтому первый Принести все пользовательские альбомы с:Fetch facebook альбомы и обложка фотографий

new Request(session, "/me/albums", null, HttpMethod.GET, new Request.Callback() { 
      public void onCompleted(Response response) { 
} 
}; 

, а затем я использую адаптер, чтобы показать каждый альбом внутри GridView, так что внутри метода GetView я называю /{album-id}/picture, но я не знаю, как разобрать ответ. Что мне нужно сделать с объектом Response для отображения изображения внутри ImageView? Есть ли лучший способ сделать это?

Это, как я сделал запрос

   Bundle params = new Bundle(); 
       params.putString("type", "thumbnail"); 
       String albumid = albums.get(position); 
       new Request(session, "/"+ albumid +"/picture", 
         params, HttpMethod.GET, 
         new Request.Callback() { 
        public void onCompleted(Response response) { 

         ViewHolder holder = new ViewHolder(); 
        } 
       } 
         ).executeAsync(); 

И это то, что я получаю:

{Response: responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"FACEBOOK_NON_JSON_RESULT":"����\u0000\u0010JFIF\u0000\u0001\u0002\u0000\u0000\u0001\u0000\u0001\u0000\u0000��\u0000\u0004*\u0000��\u0002\u001cICC_PROFILE\u0000\u0001\u0001\u0000\u0000\u0002"}}, error: null, isFromCache:false}

ответ

0

Вы, скорее всего, получает назад HTTP перенаправления на URL изображения (это было бы полезной в <img> метки на веб-сайте, например)

Это отражено в Album documentation:

Fields No fields are returned, instead you will receive the image file itself.

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

/<version>/<album id>?fields=cover_photo - После того, как вы имеете ID вы можете запросить данные до Photo object «s и принять наиболее подходящего размера исходное изображение из ответа

+0

, но если я хочу, чтобы отобразить сетку с именами всех альбомов и обложки я должен сделать запрос для каждого альбома, чтобы получить URL из объекта фотографии, а затем загрузить фотографию? –

+0

Вы можете либо получить байты изображения с помощью/picture (как вы сейчас делаете, но ваш код ожидает строку), либо получить URL-адреса изображений в пакетном режиме, и загрузить их в виде так же, как вы пытаясь сделать в вашем примере код – Igy

1

для извлечения facebook альбомов использовать это

Bundle params = new Bundle(); 
       //params.putString("fields", "photos.limit(10),name,count"); 
       params.putString("access_token", facebook.getAccessToken()); 
       params.putString("limit", "1000"); 
       //me = new JSONObject(facebook.request("me/albums",params ,"GET")); 
       System.out.println("params are: "+params); 

       if(facebook.getAccessToken()!= null) 
       { 
        me = new JSONObject(facebook.request("me/albums",params ,"GET")); 
       } 

       fbAlbumList.clear(); 
       try { 
        //JSONObject jsonObject = new JSONObject(respons); 
        JSONArray jsonArray = me.getJSONArray("data"); 
        for (int i = 0; i < jsonArray.length(); i++) { 
         FbAlbumBean bean = new FbAlbumBean(); 
         bean.albumId = jsonArray.getJSONObject(i).getString("id"); 
         bean.albumName = jsonArray.getJSONObject(i).getString("name"); 
         if(i!=0) 
         { 
         bean.coverId = jsonArray.getJSONObject(i).getString("cover_photo"); 
         bean.albumCount = jsonArray.getJSONObject(i).getInt("count")+""; 
         } 
         fbAlbumList.add(bean); 
        } 

И для выборки Фото б у ALBUMID

public void fetchPhotosFromAlbumId(final String album_id, Activity activity){ 

    //new FetchAsyncTask().execute(album_id); 

    progressDialog1 = ProgressDialog.show(activity,"", "Please wait..."); 
    System.out.println("progress dialog: "+progressDialog1); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      Looper.prepare(); 

      JSONObject me; 
      try { 
       fbPhotosList.clear(); 
       String offset1 = String.valueOf(offset+100); 
       Bundle params = new Bundle(); 
       params.putString("limit", "1000"); 
       params.putString("access_token", facebook.getAccessToken()); 

       //me = new JSONObject(facebook.request("me/albums",params ,"GET")); 
       me = new JSONObject(facebook.request(album_id+"/photos",params ,"GET")); 
       System.out.println(me); 

       JSONArray jsonArray = me.getJSONArray("data"); 
       for (int i = 0; i < jsonArray.length(); i++) { 
        CameraRollBean bean = new CameraRollBean(); 
        bean.filePath = jsonArray.getJSONObject(i).getString("source"); 
        bean.showRight_IB = false; 
        fbPhotosList.add(bean); 
       } 
       System.out.println("size of fb album: "+fbAlbumList.size()); 
       FbAlbumsScreen.fromFbScreen = true; 
       Intent intent = new Intent(_activity, CameraRollScreen.class); 
       intent.putExtra("album_id", album_id); 
       _activity.startActivity(intent); 


       if(progressDialog1!=null) 
        progressDialog1.cancel(); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 

    progressDialog1.show(); 
} 
+0

отлично, но как вы получаете изображение, расположенное в bean.coverId? Мне нужно отображать каждый альбом с его обложкой. –

Смежные вопросы