#android #json #android-studio #android-volley
#Android #json #android-studio #android-volley
Вопрос:
У меня есть класс аутентификации, который имеет метод Auth с 2 аргументами. после вызова этого метода генерируется запрос volley, и ответ перехватывается через другую функцию из-за асинхронности. этот объект является статическим объектом и доступен в другом классе, но всегда показывает null после создания объекта или его инициализации при создании activity.
Давайте проверим мой класс аутентификации:
public class Authenticate {
private static final String URL = "http://allskkc/zaigham/idsrs_authentication.php";
public static JSONObject finalresu<
public Authenticate() {
}
public static void Auth(String IEMI, String PIN) throws TimeoutException {
final JSONObject params = new JSONObject();
finalresult = new JSONObject();
RequestQueue queue = Volley.newRequestQueue(Splash.context);
try {
params.put("iemi", IEMI);
params.put("pin", PIN);
} catch (JSONException e) {
e.printStackTrace();
}
Log.e("params to server", params.toString());
JsonObjectRequest jsOBJRequest = new JsonObjectRequest
(Request.Method.POST, URL, params, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("response from server", response.toString());
ftn(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Response error",error.toString());
}
});
queue.add(jsOBJRequest);
}
public static void ftn(JSONObject jsonObject) {
finalresult = jsonObject;
Log.e("as", "Response in ftn() = " finalresult.toString());
}
}
окончательный результат finalresult имеет значение, когда я вызываю этот метод Auth(), но в моем классе Login он показывает {}
давайте проверим мой вызов метода:
try {
Authenticate.Auth("358607051299527","1122");
} catch (TimeoutException e) {
e.printStackTrace();
}
Log.e("as","Prefrences Saved");
Log.e("as","My final result = " Authenticate.finalresult.toString());
Я приложил свое изображение Log.e, которое может помочь лучше понять.
Комментарии:
1. почему вы сделали снимок экрана с ошибкой, а не скопировали ее?
Ответ №1:
Вы можете видеть в своих журналах, что приложение пытается получить результат запроса до выполнения запроса. Сетевой запрос является асинхронным, он выполняется в фоновом потоке.
Вы должны получить результат после завершения запроса в каком-то обратном вызове.
Комментарии:
1. Как я это исправлю @sergey