Получение нулевого значения из 1 класса в другой после сохранения объекта значения

#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