2013-03-06 77 views
4

我认为标题是自我描述。在我的应用程序中,我有一个登录表单。根据请求,用户应该能够通过Facebook设置他们的个人资料图像。是否可以访问Facebook图库并让用户选择图像?

所以,我的问题是,是否有可能在应用程序内显示用户的图库图像,并让用户从中选择图像?

我检查了Facebook SDK和goggled以及我发现的那些信息是基于Graph上传图片到Facebook。

任何建议/意见将不胜感激。

回答

0

你检查这个答案here

ImageView user_picture; 
userpicture=(ImageView)findViewById(R.id.userpicture); 
URL img_value = null; 
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large"); 
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream()); 
userpicture.setImageBitmap(mIcon1); 

您可能会看到this了。

编辑:

我认为这将工作负载专辑,但唯一不同的是,你需要一个access token。这意味着你可以获取用户的专辑仅当用户登录到Facebook的。以下代码的AsyncTask调用getAlbumsData。在那看看doInBackground。它提取JSON并在onPostExecute上,您会看到它正在将该专辑加载到已在前面定义的列表视图中。

这里是(简单)示例代码

private class getAlbumsData extends AsyncTask<Void, Void, Void> { 

    LinearLayout linlaHeaderProgress = (LinearLayout) findViewById(R.id.linlaHeaderProgress); 

    @Override 
    protected void onPreExecute() { 

     // SHOW THE PROGRESS BAR (SPINNER) WHILE LOADING ALBUMS 
     linlaHeaderProgress.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     // CHANGE THE LOADING MORE STATUS TO PREVENT DUPLICATE CALLS FOR 
     // MORE DATA WHILE LOADING A BATCH 
     loadingMore = true; 

     // SET THE INITIAL URL TO GET THE FIRST LOT OF ALBUMS 
     URL = "https://graph.facebook.com/" + initialUserID 
       + "/albums&access_token=" 
       + Utility.mFacebook.getAccessToken() + "?limit=10"; 

     try { 

      HttpClient hc = new DefaultHttpClient(); 
      HttpGet get = new HttpGet(URL); 
      HttpResponse rp = hc.execute(get); 

      if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
       String queryAlbums = EntityUtils.toString(rp.getEntity()); 

       JSONObject JOTemp = new JSONObject(queryAlbums); 

       JSONArray JAAlbums = JOTemp.getJSONArray("data"); 

       if (JAAlbums.length() == 0) { 
        stopLoadingData = true; 
        Runnable run = new Runnable() { 

         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), 
            "No more Albums", Toast.LENGTH_SHORT) 
            .show(); 
         } 
        }; 
        Albums.this.runOnUiThread(run); 

       } else { 
        // PAGING JSONOBJECT 
        if (JOTemp.has("paging")) { 
         JSONObject JOPaging = JOTemp.getJSONObject("paging"); 

         if (JOPaging.has("next")) { 
          String initialpagingURL = JOPaging 
            .getString("next"); 

          String[] parts = initialpagingURL.split("limit=10"); 
          String getLimit = parts[1]; 

          pagingURL = "https://graph.facebook.com/" 
            + initialUserID + "/albums&access_token=" 
            + Utility.mFacebook.getAccessToken() 
            + "?limit=10" + getLimit; 

         } else { 
          stopLoadingData = true; 
          Runnable run = new Runnable() { 

           @Override 
           public void run() { 
            Toast.makeText(getApplicationContext(), 
              "No more Albums", 
              Toast.LENGTH_SHORT).show(); 
           } 
          }; 
          Albums.this.runOnUiThread(run); 
         } 
        } else { 
         stopLoadingData = true; 
         Runnable run = new Runnable() { 

          @Override 
          public void run() { 
           Toast.makeText(getApplicationContext(), 
             "No more Albums", 
             Toast.LENGTH_SHORT).show(); 
          } 
         }; 
         Albums.this.runOnUiThread(run); 

        } 

        getAlbums albums; 

        for (int i = 0; i < JAAlbums.length(); i++) { 
         JSONObject JOAlbums = JAAlbums.getJSONObject(i); 

         if (JOAlbums.has("link")) { 

          albums = new getAlbums(); 

          // GET THE ALBUM ID 
          if (JOAlbums.has("id")) { 
           albums.setAlbumID(JOAlbums.getString("id")); 
          } else { 
           albums.setAlbumID(null); 
          } 

          // GET THE ALBUM NAME 
          if (JOAlbums.has("name")) { 
           albums.setAlbumName(JOAlbums 
             .getString("name")); 
          } else { 
           albums.setAlbumName(null); 
          } 

          // GET THE ALBUM COVER PHOTO 
          if (JOAlbums.has("cover_photo")) { 
           albums.setAlbumCover("https://graph.facebook.com/" 
             + JOAlbums.getString("cover_photo") 
             + "/picture?type=normal" 
             + "&access_token=" 
             + Utility.mFacebook 
               .getAccessToken()); 
          } else { 
           albums.setAlbumCover("https://graph.facebook.com/" 
             + JOAlbums.getString("id") 
             + "/picture?type=album" 
             + "&access_token=" 
             + Utility.mFacebook 
               .getAccessToken()); 
          } 

          // GET THE ALBUM'S PHOTO COUNT 
          if (JOAlbums.has("count")) { 
           albums.setAlbumPhotoCount(JOAlbums 
             .getString("count")); 
          } else { 
           albums.setAlbumPhotoCount("0"); 
          } 

          arrAlbums.add(albums); 
         } 
        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     // SET THE ADAPTER TO THE LISTVIEW 
     lv.setAdapter(adapter); 

     // CHANGE THE LOADING MORE STATUS 
     loadingMore = false; 

     // HIDE THE PROGRESS BAR (SPINNER) AFTER LOADING ALBUMS 
     linlaHeaderProgress.setVisibility(View.GONE); 
    } 

} 

如需更多帮助,寻找到original answer。如果是,你需要更多的则那里有一个完整的working source code与explaination.Though那不是更混乱了一下回答我提到.Inshallah,这将解决您的查询。

+0

感谢Nezam,但我的问题是如何加载Facebook的照片(库),然后让用户从那里选择图像,而不是如何加载配置文件的图像。再次感谢。 – Hesam 2013-03-06 06:45:20

+0

你有答案吗? – Nezam 2013-03-07 04:31:45

+0

看到编辑现在.. – Nezam 2013-03-07 04:45:46