Я делаю приложение, которое требует получения данных из 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
и только после этого выполняет запрос.
Что я должен изменить, чтобы получить фактический объект при вызове?
EDIT: Благодаря Этот ответ
Итак, я нашел решение для получения объекта по вызову, но это не идеальный вариант (возможно, даже неправильный, поскольку я не очень опытен в программировании, но он работает для меня)
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 сразу после создания конструктора. Я с нетерпением жду улучшения этого кода, если вы дадите мне несколько советов.