我正在制作需要从Facebook获取数据的应用程序。 为了避免重复代码,我决定为GraphRequest创建一个类。
public class FacebookRequest {
private static JSONObject object;
private FacebookRequest(JSONObject object) {
this.object = object;
}
private static JSONObject GraphApiRequest(String path, AccessToken token){
new GraphRequest(
token,
path,
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
object = response.getJSONObject();
}
}
).executeAsync();
return object;
}
public static JSONObject getGraphApi(String path, AccessToken token){
return GraphApiRequest(path, token);
}}
要调用我使用的课程
private static FacebookRequest fbRequest;
//....
JSONObject object= fbRequest.getGraphApi(path,token);
问题是GraphApiRequest
方法始终返回object=null
并且仅在执行请求之后。
我应该更改什么才能获得实际的对象?
修改 感谢This answer
所以我找到了一个让对象随叫随到的解决方案,但这不是完美的选择(可能甚至是错的,因为我在编程方面不是很有经验,但它对我有用)
public class FacebookRequest {
private JSONObject object;
public FacebookRequest(String path, AccessToken token) {
new GraphRequest(
token,
path,
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
object = response.getJSONObject();
}
}
).executeAsync();
}
public JSONObject getObject(){
return object;
}
}
当我呼叫请求时,它会在一段时间后执行
protected void onCreate(Bundle savedInstanceState) {
//...
FacebookRequest fbRequest = new FacebookRequest(path,token);
//...
}
要使用电话来获取实际对象。
JSONObject object = fbRequest.getObject();
如果我在创建构造函数后立即调用JSONObject ,它仍然无效。我期待着改进这段代码,如果你能给我一些建议。
答案 0 :(得分:4)
而不是调用。private static FacebookRequest fbRequest;
静态地,您应该在构造函数中调用,这样您的对象将不为null,并且作为对象中存储的响应的回报,您将接收数据而不是null。
答案 1 :(得分:4)
这里解释了您要找的内容(Facebook API how to wait til graphRequest executeAsync is done)。
正如您所要求的那样,在创建构造函数之后立即使用它将.executeAsyc()
替换为.executeAndWait()
。
由于主线程冻结和用户体验不佳,因此不建议这样做。
答案 2 :(得分:1)
为什么不跟踪https://developers.facebook.com/docs/android/graph/此文档并使用此方法GraphRequest.newMeRequest()