如何使用Java解析android中从facebook检索到的JSONObject?
我试图用java解析从facebook图形API返回的JSONObject。 我想通过graph api获取一些用户数据和朋友的数据。 我试图分析的图形如下:如何使用Java解析android中从facebook检索到的JSONObject?,java,android,json,facebook,facebook-graph-api,Java,Android,Json,Facebook,Facebook Graph Api,我试图用java解析从facebook图形API返回的JSONObject。 我想通过graph api获取一些用户数据和朋友的数据。 我试图分析的图形如下: { "id": "985453561536987", "first_name": "abc", "last_name": "xyz", "name": "abc xyz", "birthday": "03/17/1995", "gender": "male", "friends": { "data":
{
"id": "985453561536987",
"first_name": "abc",
"last_name": "xyz",
"name": "abc xyz",
"birthday": "03/17/1995",
"gender": "male",
"friends": {
"data": [
{
"first_name": "Div",
"last_name": "Tol",
"gender": "female",
"id": "150534786284567"
}
],
"paging": {
"next": "https://graph.facebook.com/v2.4/985363151536997/friends?fields=first_name,last_name,about,birthday,gender&access_token=CAANEU8qO1HYBAJG4ZCYtc5lLuZBv3zKWe6qRN3Oy5iYtijFsQwplDH2AFe2YiXS1lZCXtxnYZBXLhBo6N65KEmW3wuNKxXiZCCVgFpg8r3elkqgCRFZBZAIgscoZCtxezk08fpiPnYqujCdMY4ZB3d88vqcDZCnpon9TjPZBE2Irzlrcqn8gzPZB8nvRu2ZBoLt6Y1yGlovgt0K18uYBbyj8GpNZCX&limit=25&offset=25&__after_id=enc_AdBfWxVZCaZAlL5ZBGlZAQjMZC2M5m4uQMNSQPfwNfsxC9TwgQzgK55kQEVGeZBEJMoyXfvySnZAOwaHCGvmgj5Ngzut6D9"
},
"summary": {
"total_count": 533
}
},
}
我在尝试解析JSONObject时遇到NullPointerException
对于解析上述信息,我执行以下操作:
public void graphActivity(AccessToken accessToken) {
//used is graph request code from graph api explorer
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
// Insert your code here
try {
//getting error in following code where object.getString("first_name");
//is written
//null pointer exception
//userVO.setId(object.getString("id");
userVO.setUserFirstName(object.getString("first_name"));
userVO.setUserLastName(object.getString("last_name"));
userVO.setUserName(object.getString("name"));
userVO.setUserBirthday(object.getString("birthday"));
userVO.setUserGender(object.getString("gender"));
JSONObject friendsJsonObject = object.getJSONObject("friends");
JSONArray data = friendsJsonObject.getJSONArray("data");
String userString = "USER::\n"
+ "id: " + userVO.getId() + "\n"
+ "fn: " + userVO.getUserFirstName() + "\n"
+ "ln: " + userVO.getUserLastName() + "\n"
+ "un: " + userVO.getUserName() + "\n"
+ "gen: " + userVO.getUserGender() + "\n"
+ "bday: " + userVO.getUserBirthday() + "\n";
Log.d(TAG, userString);
friendList = new ArrayList();
int length_list = data.length();
for (int i = 0; i < length_list; i++) {
JSONObject dataObj = data.getJSONObject(i);
//friendVO.setFriendId(dataObj.getString("id"));
friendVO.setFriendFirstName(dataObj.getString("first_name"));
friendVO.setFriendLastName(dataObj.getString("last_name"));
friendVO.setFriendName(dataObj.getString("name"));
friendVO.setFriendBirthday(dataObj.getString("birthday"));
friendVO.setFriendGender(dataObj.getString("gender"));
friendList.add(friendVO);
String friendString = "FRIEND::\n"
+ "id: " + friendVO.getFriendId() + "\n"
+ "fn: " + friendVO.getFriendFirstName() + "\n"
+ "ln: " + friendVO.getFriendLastName() + "\n"
+ "un: " + friendVO.getFriendName() + "\n"
+ "gen: " + friendVO.getFriendGender() + "\n"
+ "bday: " + friendVO.getFriendBirthday() + "\n";
Log.d(TAG, friendString);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,first_name,last_name,name,birthday,about,gender,website,friends{first_name,last_name,name,about,birthday,gender}");
request.setParameters(parameters);
request.executeAsync();
}
您可以使用com.google.gson.gson类中的fromJson方法将json转换为java对象,而不是使用所有setter。教程。
这将简化代码并可能解决问题。您可以使用com.google.gson.gson类中的fromJson方法将json转换为java对象,而不是使用所有setter。教程。
这将简化您的代码并可能解决问题。基本上,GraphResponse在userVO.setUserFirstNameobject.getStringfirst\u name行之前包含您期望的响应JSONObject;请添加以下行并检查
基本上,GraphResponse在userVO.setUserFirstNameobject.getStringfirst\u name行之前包含您期望的响应JSONObject;请添加以下行并检查
请尝试下面的方法。我在我的一个项目中使用了同样的方法,效果很好
public Map<String, String> getGraphData(String fbGraph) {
Gson gson = new Gson();//.toJson(fbGraph);
Map<String, String> fbProfile = gson.fromJson(fbGraph, new TypeToken<Map<String, String>>(){}.getType());//fromJson(gson, new TypeToken<Map<String, String>>(){}.getType());
return fbProfile;
}
请尝试下面的方法。我在我的一个项目中使用了同样的方法,效果很好
public Map<String, String> getGraphData(String fbGraph) {
Gson gson = new Gson();//.toJson(fbGraph);
Map<String, String> fbProfile = gson.fromJson(fbGraph, new TypeToken<Map<String, String>>(){}.getType());//fromJson(gson, new TypeToken<Map<String, String>>(){}.getType());
return fbProfile;
}
请尝试以下代码:
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
final JSONObject object,
GraphResponse response) {
// Application code
final JSONObject jsonObject = response.getJSONObject();
String first_name = "";
String last_name = "";
try {
first_name = jsonObject.getString("first_name");
last_name = jsonObject.getString("last_name");
JSONObject friends = jsonObject.getJSONObject("friends");
JSONArray data = friends.getJSONArray("data");
JSONObject objectdata = data.getJSONObject(0);
String friend_first_name = objectdata.getString("first_name");
String friend_last_name = objectdata.getString("last_name");
} catch (JSONException e) {
e.printStackTrace();
}});
请尝试以下代码:
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
final JSONObject object,
GraphResponse response) {
// Application code
final JSONObject jsonObject = response.getJSONObject();
String first_name = "";
String last_name = "";
try {
first_name = jsonObject.getString("first_name");
last_name = jsonObject.getString("last_name");
JSONObject friends = jsonObject.getJSONObject("friends");
JSONArray data = friends.getJSONArray("data");
JSONObject objectdata = data.getJSONObject(0);
String friend_first_name = objectdata.getString("first_name");
String friend_last_name = objectdata.getString("last_name");
} catch (JSONException e) {
e.printStackTrace();
}});
java.lang.NullPointerException发生在object.getStringfirst\u name;因为GraphRequest返回的JSONObject为null
当您使用request.executeAsync异步调用GraphRequest时;将在单独的线程中异步执行,即此行下面的代码未被阻止
因此,为了避免NPE问题,您可以将您的代码包含在以下内容中:
if(object!=null) {
//your code
}
else {
Toast.makeText(this, "Please Try Again ",Toast.LENGTH_SHORT).show();
}
要解析JSON数据,请使用以下JSON解析器:
GSON-
杰克逊-
java.lang.NullPointerException发生在object.getStringfirst\u name;因为GraphRequest返回的JSONObject为null
当您使用request.executeAsync异步调用GraphRequest时;将在单独的线程中异步执行,即此行下面的代码未被阻止
因此,为了避免NPE问题,您可以将您的代码包含在以下内容中:
if(object!=null) {
//your code
}
else {
Toast.makeText(this, "Please Try Again ",Toast.LENGTH_SHORT).show();
}
要解析JSON数据,请使用以下JSON解析器:
GSON-
杰克逊-
你能发布错误日志吗?@muilpp是的,我用日志编辑了我的问题。你能发布错误日志吗?@muilpp是的,我用log编辑了我的问题。所以我需要使用graph response并将其转换为responseJSONObject而不是JSONObject??我引用文档以便我的感受……或者,您可以使用response Object检查错误,所以我需要使用graph response并将其转换为responseJSONObject??我引用文档以便我的感觉……或者,您可以使用Response对象检查错误