我是Android编码新手,我正在尝试访问facebook新闻Feed并在listview中显示。我在一个活动中使用Facebook按钮小部件对用户进行身份验证,并将会话传递给下一个活动。会话正确传递但是当我尝试在GraphObject中获取新闻源和存储请求的响应时,它返回null。
这就是我的尝试:
new Request(
userSession,
"/me/home",
null,
HttpMethod.GET,
new Request.Callback() {
public void onCompleted(Response response) {
try
{
GraphObject newsFeed = response.getGraphObject();
JSONObject jsonObj=newsFeed.getInnerJSONObject();
JSONArray jsonArr = jsonObj.getJSONArray("data");
for(int i=0;i<jsonArr.length();i++)
{
JSONObject jsonObj1=jsonArr.getJSONObject(i);
strings.add(jsonObj1.getString("id"));
}
} catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
).executeAsync();
}
调试时,图形对象返回null。我是android开发的新手,并且一直在尝试阅读这些文档。任何更好地理解这一点的链接将不胜感激。提前致谢。
答案 0 :(得分:1)
确保:
1。您已使用OpenSSL正确生成了app-id并在应用程序清单中声明了它。
2。应用程序包名称和应用程序ID已在您的Facebook应用程序详细信息页面上正确输入。
3。您已申请相关权限并已从FB收到。
4。访问令牌有效(即非空)。
5. 访问令牌的会话状态为OPENED。
答案 1 :(得分:0)
有些时候将参数的弃用问题传递给GraphRequest,所以要找到它将facebook错误检查代码写入GraphRequest这里我写了一个名为makeMeRequest(Accesstoken accesstoke)的完整方法,这里访问令牌是由facebook提供的你必须在调用这个方法时传入它。这是这个方法的代码
private void makeMeRequest(AccessToken accesstoken) {
GraphRequest request = GraphRequest.newMeRequest(accesstoken, new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
FacebookRequestError facebookRequestError = response.getError();
if (facebookRequestError != null) {
Log.e("Error", facebookRequestError + "");
}
try {
System.out.println("GraphRequest response----" + object);
System.out.println("GraphRequest response----" + object.getString("name"));
System.out.println("GraphRequest response----" + object.getString("email"));
} catch (Exception e) {
e.printStackTrace();
}
HashMap<String, String> fb_data = new HashMap<String, String>();
try {
fb_data.put("name", object.getString("name"));
} catch (Exception e) {
fb_data.put("name", "");
}
try {
fb_data.put("id", object.getString("id"));
} catch (Exception e) {
fb_data.put("id", "");
}
try {
fb_data.put("email", object.getString("email"));
} catch (Exception e) {
fb_data.put("email", "");
}
try {
fb_data.put("dob", object.getString("dob"));
} catch (Exception e) {
fb_data.put("dob", "");
}
pdialog.show();
if (fb_data.get("email").equalsIgnoreCase("") || fb_data.get("email") == null) {
checkSocialMedia("facebook", fb_data);
} else {
LoginProcess(fb_data, "facebook");
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name");
request.setParameters(parameters);
request.executeAsync();
}
在此方法中,您可以看到此代码将返回错误的代码,您将了解错误消息并可以对其进行管理
FacebookRequestError facebookRequestError = response.getError();
if (facebookRequestError != null) {
Log.e("Error", facebookRequestError + "");
}
但是如果错误是关于传递给图形请求对象的弃用参数,那么检查它是否已被弃用,如果它已弃用,它将打印到facebook错误消息,你必须从参数中删除它...这里是方法makeMeRequest()
中的图形请求对象的代码 Bundle parameters = new Bundle();
parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name");
request.setParameters(parameters);
request.executeAsync();
您只需要从
中删除该参数即可 parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name");
您的fb登录集成工作正常