我正在使用适用于Android的Facebook SDK 3.0(最终版).当我尝试在登录的用户供稿上发布新状态时,有时(并非总是)在.getInnerJSONObject()处收到NullPointerException.以下是我在新的Request.Callback(){}中使用的代码:
public void onCompleted(Response response) {
JSONObject graphResponse = response
.getGraphObject()
.getInnerJSONObject();
String postId = null;
try {
postId = graphResponse.getString("id");
} catch (JSONException e) {
Log.d("", "JSON error "+ e.getMessage());
}
FacebookRequestError error = response.getError();
if (error != null) {
Toast.makeText(SessionLoginSampleActivity.this, error.getErrorMessage(), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(SessionLoginSampleActivity.this, "Post successful " + postId, Toast.LENGTH_LONG).show();
}
}
解决方法:
如果请求中有错误,则response.getGraphObject()返回null.
使用Response的代码应始终检查在访问getGraphObject()之前response.getError()返回null.
Response有三种构造函数:一种采用GraphObject,一种采用GraphObjectList,另一种采用FacebookRequestError,并且所有字段都是最终的.因此,其中只有一个在任何Response对象上都不能为空.