![](/img/trans.png)
[英]Android Facebook Graph API JSONException 'No value for email'
[英]Android Facebook graph api, JSONException No value for photos
我正在嘗試從Facebook圖形api獲取用戶照片的列表,但我不斷收到錯誤消息:
JSONException No value for photos
我已經搜索了所有其他可用答案,並嘗試了所有建議,但無法找到導致錯誤的原因。
這是我用來獲取照片的功能:
public void getUserPhotos(){
GraphRequest request = GraphRequest.newMeRequest(
AccessToken.getCurrentAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
try {
//This contains all the photos with array data>>link
JSONObject photosobject = object.getJSONObject("photos");
} catch (Exception e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "photos{link}");
request.setParameters(parameters);
request.executeAsync();
}
我創建了一個測試用戶,並確保他們具有正確的權限。 現在登錄正常,我可以為用戶提供公共信息。
我認為這可能是權限問題,所以我運行了此命令:
String permissions = AccessToken.getCurrentAccessToken().getPermissions().toString();
System.out.println(permissions);
記錄的響應為:
[public_profile, user_friends, user_photos]
因此,這不是許可問題。
我登錄到該用戶並添加了照片,因此也不應該成為問題。
我已經看到一些示例使用"photos{link}"
作為字段,而其他示例使用"images"
。
"photos{link}"
給了我這個錯誤:
12-28 22:34:23.991 9199-9199/com.amazon.mysampleapp W/System.err: org.json.JSONException: No value for photos
12-28 22:34:23.991 9199-9199/com.amazon.mysampleapp W/System.err: at org.json.JSONObject.get(JSONObject.java:389)
12-28 22:34:23.991 9199-9199/com.amazon.mysampleapp W/System.err: at org.json.JSONObject.getJSONObject(JSONObject.java:609)
12-28 22:34:23.991 9199-9199/com.amazon.mysampleapp W/System.err: at com.mysampleapp.Fragments.ProfileFragment$1.onCompleted(ProfileFragment.java:294)
12-28 22:34:23.991 9199-9199/com.amazon.mysampleapp W/System.err: at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:304)
12-28 22:34:23.991 9199-9199/com.amazon.mysampleapp W/System.err: at com.facebook.GraphRequest$5.run(GraphRequest.java:1368)
12-28 22:34:23.991 9199-9199/com.amazon.mysampleapp W/System.err: at android.os.Handler.handleCallback(Handler.java:751)
12-28 22:34:23.992 9199-9199/com.amazon.mysampleapp W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
12-28 22:34:23.992 9199-9199/com.amazon.mysampleapp W/System.err: at android.os.Looper.loop(Looper.java:154)
12-28 22:34:23.992 9199-9199/com.amazon.mysampleapp W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6077)
12-28 22:34:23.992 9199-9199/com.amazon.mysampleapp W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-28 22:34:23.992 9199-9199/com.amazon.mysampleapp W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
12-28 22:34:23.992 9199-9199/com.amazon.mysampleapp W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
"images"
字段僅返回空指針異常。
我查看了grapi api文檔,發現了這一點:
/ me節點是一個特殊的終結點,它轉換為當前使用其訪問令牌進行API調用的人員的user_id(或Facebook頁面的page_id)。 如果您具有用戶訪問令牌,則可以使用以下方法檢索用戶的所有照片:
獲取graph.facebook.com / me / photos
這似乎是正確的,並且我正在運行我的請求,所以我不確定我在做什么錯。
在此先感謝您的幫助。
mainActivity.java
btnLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.v("Main", response.toString());
setProfileToView(object);
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender, birthday");
request.setParameters(parameters);
request.executeAsync();
}
public void showCustomDialog(JSONObject jsonObject)
{
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.facebookdetails);
dialog.setTitle("Facebook Details");
email = (TextView)dialog.findViewById(R.id.email);
facebookName = (TextView) dialog.findViewById(R.id.name);
gender = (TextView) dialog.findViewById(R.id.gender);
infoLayout = (LinearLayout) dialog.findViewById(R.id.layout_info);
profilePictureView = (ProfilePictureView)dialog. findViewById(R.id.imageprofile);
DateofBirth= (TextView)dialog. findViewById(R.id.dob);
showProgressDialog();
try {
disconnectFromFacebook();
if(jsonObject.has("birthday"))
{
DateofBirth.setText(jsonObject.getString("birthday"));
}
if(jsonObject.has("email")){
email.setText(jsonObject.getString("email"));
}
if(jsonObject.has("gender")||jsonObject.has("name")) {
gender.setText(jsonObject.getString("gender"));
facebookName.setText(jsonObject.getString("name"));
}
profilePictureView.setPresetSize(ProfilePictureView.NORMAL);
profilePictureView.setProfileId(jsonObject.getString("id"));
infoLayout.setVisibility(View.VISIBLE);
mProgressDialog.dismiss();
} catch (JSONException e) {
e.printStackTrace();
}
dialog.show();
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.