Асинхронный метод запроса GET получает данные, но возвращает нулевой массив, отлично работает при отладке - PullRequest
0 голосов
/ 08 мая 2018

MainActivity.java

String[] captcha = new String[2];

b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getMessle();
        }
    });

private void getMessle() {
    captcha[0] = "before";
    captcha[1] = "before2";

    RequestClass rc = new RequestClass();
    captcha = rc.getCaptcha();
    tv.setText(captcha[1]);

}

RequestClass.java

String[] saResult = new String[2];

public String[] getCaptcha() {

    httpUrl = new HttpUrl.Builder()
            .scheme(strScheme)
            .host(strHost)
            .addPathSegments(path)
            .build();

    request = new Request.Builder()
            .url(httpUrl)
            .addHeader(header, key)
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            saResult[0] = response.header("Set-Cookie");
            try {
                jsonObject = new JSONObject(response.body().string());
                saResult[1] = jsonObject.getString("image_url");
            } catch (JSONException je) {

            }
        }
    });
    return saResult;
}

Я проверил, и не похоже, чтобы какие-то исключения были обнаружены. Я также знаю, что мое приложение также получает ответ, и данные определенно есть в onResponse (). После некоторого расширенного тестирования, похоже, что мой массив назначен до получения ответа.

1 Ответ

0 голосов
/ 08 мая 2018

captcha = rc.getCaptcha ();

Вы называете это сразу после того, как запросили. Запрос не выполняется тогда и нет результата. Все идет асинхронно.

Только в onResponse () вы получите результат. Долгое время спустя. И именно в onResponse () вы должны обработать результат, например, отобразив его в текстовом представлении.

...