【问题标题】:Is it possible to have access to Facebook gallery and let the user select an image?是否可以访问 Facebook 画廊并让用户选择图像?
【发布时间】:2013-02-20 17:39:47
【问题描述】:

我认为标题是自我描述的。在我的应用程序中,我有一个登录表单。根据要求,用户应该能够通过 Facebook 设置他们的个人资料图像。

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

我检查了Facebook SDK 并使用了护目镜,但我发现的这些信息是基于通过 Graph 将图像上传到 Facebook。

任何建议/cmets 将不胜感激。

【问题讨论】:

    标签: android facebook facebook-graph-api


    【解决方案1】:

    你检查过这个答案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 时,您才能获取该用户的相册。以下代码有一个 @ 987654327@ 调用了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 和解释。虽然这比我提到的答案更令人困惑。Inshallah,这将解决您的查询。

    【讨论】:

    • 感谢 Nezam,但我的问题是如何加载 Facebook 的照片(图库),然后让用户从那里选择图像,而不是如何加载个人资料图像。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多