Facebook SDK for Android为封面图片提供了错误的结果

时间:2013-08-08 14:47:22

标签: android facebook facebook-graph-api

我正在开发一个使用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());
    }
}

1 个答案:

答案 0 :(得分: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())});