2

我正在开发一个使用 Facebook 进行用户登录的应用程序。该过程已成功完成,但是当我向 Facebook 询问用户信息(具有相应权限)时,我得到了除了他的封面图片之外的所有内容。我总是得到的响应是“FACEBOOK_NON_JSON_RESULT”和错误代码为 200 的 JFIF 图像,而不是带有图像 URL 的 JSON 对象的预期响应,如下所示:

[{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}]

我在 Facebook 开发者页面的 Graph API Explorer 中测试了应用程序的访问令牌,它在那里工作。这个问题只发生在设备中,所以我不知道问题出在哪里。

我最近更改了应用程序的权限。但是,直到今天,该应用程序一直在使用新权限完美运行,响应突然变为该 JFIF 图像。如果有人可以为这个问题提供任何指示或解决方案,我将不胜感激。

编辑:这是源代码的一部分:

public void getImage(String image_id, int width, int height)
{

    Session session = Session.getActiveSession();

    // Get request parameters
    Bundle requestParams = new Bundle();
    requestParams.putString("access_token", session.getAccessToken());
    requestParams.putBoolean("redirect", false);
    requestParams.putInt("width", width);
    requestParams.putInt("height", height);

    // Request URL
    String requestURL = "/" + image_id + "/picture";

    Request request = new Request(session, requestURL, requestParams, HttpMethod.GET, callback);

    Response response = request.executeAndWait();
    if (response.getError() == null)
    {
        setResponseJSON(response.getGraphObject().getInnerJSONObject());
    }
}
4

1 回答 1

0

这是一个用于获取用户 facebook 的异步类。您唯一需要的是 Facebook 用户 ID。

私有类 SetUserFacebookImage 扩展 AsyncTask {

    private ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(getActivity());
        progressDialog.setMessage("Retrieving Facebook profile image...");
        progressDialog.setIndeterminate(true);
        progressDialog.setCancelable(false);
        progressDialog.show();
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        String urlStr = params[0];
        Bitmap img = null;

        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(urlStr);
        HttpResponse response;
        try {
            response = (HttpResponse)client.execute(request);           
            HttpEntity entity = response.getEntity();
            BufferedHttpEntity bufferedEntity = new BufferedHttpEntity(entity);
            InputStream inputStream = bufferedEntity.getContent();
            img = BitmapFactory.decodeStream(inputStream);       
        } catch (MalformedURLException e) {
            Log.e(FRAGMENT_NAME, "INVALID URL");
            e.printStackTrace();
        } catch (IOException e) {
            Log.e(FRAGMENT_NAME, "UNABLE TO PARSE FACEBOOK IMAGE");
            e.printStackTrace();
        }       

        return img;
    }

    protected void onPostExecute(Bitmap bitmap) {
        progressDialog.dismiss();

        if(bitmap != null) {
            mUserProfileImageView.setImageBitmap(bitmap);
            mUser.setProfile_picture(mImageAdapter.encodeBitmap(bitmap));
        } else
            mUserProfileInterface.relayUserValidationError(
                    getResources().getString(R.string.facebook_unable_to_get_user_profile));
    }
}

您可以这样调用任务:

new SetUserFacebookImage().execute(new String[] {getFacebookUserURL(mUser.getFace_book_id())});
于 2015-04-08T21:15:38.610 回答