我搜索过我无法找到解决此问题的任何方法。 我在facebook SDK 3.5中制作了图形请求。 当我尝试使用getProperty(“Property_name”)获取数据时,如果其值为null,则用户可能未在其个人资料中设置喜欢的体育
实施例: 代码:用于buildUserInfoDisplay(GraphUser用户)方法
// I have used all The mandatory permissions
Map<String, String> map;
map = new HashMap<String, String>();
try {
map.put("ID", user.getId().toString());
String athletes = user.getProperty("favorite_athletes").toString();
String fav_teams = user.getProperty("favorite_teams").toString();
String sports = user.getProperty("sports").toString();
String education = user.getProperty("education").toString();
String work = user.getProperty("work").toString();
map.put("athletes", athletes);
map.put("fav teams", fav_teams);
map.put("sports", sports);
map.put("education", education);
map.put("work", work);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Log.e(TAG + " Error:", e.toString());
}
//PassData is Interface object send data in Map<Strin String> format to Activity launching this Fragment
try {
passData(map); //Passing data through Interface
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e(TAG + " Error 2:", e.toString());
}
}`
Error
StackTrace :
`java.lang.NullPointerException
at com.main.hotspot.MainFragment.buildUserInfoDisplay(MainFragment.java:177)
at com.main.hotspot.MainFragment.access$1(MainFragment.java:162)
at com.main.hotspot.MainFragment$2.onCompleted(MainFragment.java:77)
at com.facebook.Request$1.onCompleted(Request.java:269)
at com.facebook.Request$4.run(Request.java:1669)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
MainFragment Error:(646): java.lang.NullPointerException`
第177行是我要求体育数据的地方:
String sports = user.getProperty(“sports”)。toString(); //第177行
如果sports属性在响应中不存在,那么getProperty()将给出NullPointerException。 并且我尝试将Map格式的数据从片段传递到Activity,通过定义Interface来启动此片段。但由于异常,我无法将数据传递给活动。我想在Activity中处理它。
如何在调用getProperty()之前检查该值是否存在于用户对象中。
感谢。
答案 0 :(得分:2)
问题是你在一个可能为空的对象上调用.toString,并且根本不与SDK有关。常见的java习惯用于使用空检查保护您的调用。类似的东西:
Object athletes = user.getProperty("favorite_athletes");
if (athletes != null) {
map.put("athletes", athletes.toString());
}
...