Android Facebook 图 API JSONException 'No value for email'
Android Facebook Graph API JSONException 'No value for email'
我正在尝试使用 this link 集成 Facebook android sdk。一切都运行完美,除了我在尝试为登录用户获取 email
时遇到一个 JSONException。
下面是我得到的logcat,
07-28 16:22:37.420: W/System.err(15793): org.json.JSONException: No
value for email 07-28 16:22:37.421: W/System.err(15793): at
org.json.JSONObject.get(JSONObject.java:354) 07-28 16:22:37.421:
W/System.err(15793): at
org.json.JSONObject.getString(JSONObject.java:510) 07-28 16:22:37.421:
W/System.err(15793): at
in.airangle.foodapp.activities.TestActivity.onCompleted(TestActivity.java:83)
07-28 16:22:37.421: W/System.err(15793): at
com.facebook.GraphRequest.onCompleted(GraphRequest.java:295) 07-28
16:22:37.421: W/System.err(15793): at
com.facebook.GraphRequest.run(GraphRequest.java:1243) 07-28
16:22:37.421: W/System.err(15793): at
android.os.Handler.handleCallback(Handler.java:615) 07-28
16:22:37.421: W/System.err(15793): at
android.os.Handler.dispatchMessage(Handler.java:92) 07-28
16:22:37.422: W/System.err(15793): at
android.os.Looper.loop(Looper.java:153) 07-28 16:22:37.422:
W/System.err(15793): at
android.app.ActivityThread.main(ActivityThread.java:5000) 07-28
16:22:37.422: W/System.err(15793): at
java.lang.reflect.Method.invokeNative(Native Method) 07-28
16:22:37.422: W/System.err(15793): at
java.lang.reflect.Method.invoke(Method.java:511) 07-28 16:22:37.422:
W/System.err(15793): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
07-28 16:22:37.423: W/System.err(15793): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 07-28
16:22:37.423: W/System.err(15793): at
dalvik.system.NativeStart.main(Native Method)
我的理解是,我们应该可以使用 LoginManager
和 GraphRequest
获取用户详细信息。如果有人有任何想法,请帮助我。
我得到了答案。 facebook登录成功后,我们需要创建GraphRequest
和我们得到的accesstoken
,根据retrieveemail
。这是代码,
GraphRequest request = GraphRequest.newMeRequest(accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,GraphResponse response) {
if (response != null) {
try {
String mFbid = object.getString("id");
String mFullname = object.getString("name");
String email = object.getString("email");
} catch (JSONException e) {}
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAndWait();
我正在尝试使用 this link 集成 Facebook android sdk。一切都运行完美,除了我在尝试为登录用户获取 email
时遇到一个 JSONException。
下面是我得到的logcat,
07-28 16:22:37.420: W/System.err(15793): org.json.JSONException: No value for email 07-28 16:22:37.421: W/System.err(15793): at org.json.JSONObject.get(JSONObject.java:354) 07-28 16:22:37.421: W/System.err(15793): at org.json.JSONObject.getString(JSONObject.java:510) 07-28 16:22:37.421: W/System.err(15793): at in.airangle.foodapp.activities.TestActivity.onCompleted(TestActivity.java:83) 07-28 16:22:37.421: W/System.err(15793): at com.facebook.GraphRequest.onCompleted(GraphRequest.java:295) 07-28 16:22:37.421: W/System.err(15793): at com.facebook.GraphRequest.run(GraphRequest.java:1243) 07-28 16:22:37.421: W/System.err(15793): at android.os.Handler.handleCallback(Handler.java:615) 07-28 16:22:37.421: W/System.err(15793): at android.os.Handler.dispatchMessage(Handler.java:92) 07-28 16:22:37.422: W/System.err(15793): at android.os.Looper.loop(Looper.java:153) 07-28 16:22:37.422: W/System.err(15793): at android.app.ActivityThread.main(ActivityThread.java:5000) 07-28 16:22:37.422: W/System.err(15793): at java.lang.reflect.Method.invokeNative(Native Method) 07-28 16:22:37.422: W/System.err(15793): at java.lang.reflect.Method.invoke(Method.java:511) 07-28 16:22:37.422: W/System.err(15793): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 07-28 16:22:37.423: W/System.err(15793): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 07-28 16:22:37.423: W/System.err(15793): at dalvik.system.NativeStart.main(Native Method)
我的理解是,我们应该可以使用 LoginManager
和 GraphRequest
获取用户详细信息。如果有人有任何想法,请帮助我。
我得到了答案。 facebook登录成功后,我们需要创建GraphRequest
和我们得到的accesstoken
,根据retrieveemail
。这是代码,
GraphRequest request = GraphRequest.newMeRequest(accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,GraphResponse response) {
if (response != null) {
try {
String mFbid = object.getString("id");
String mFullname = object.getString("name");
String email = object.getString("email");
} catch (JSONException e) {}
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAndWait();