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