异步GET请求方法接收数据但返回空数组,在调试时工作正常

时间:2018-05-08 06:17:01

标签: java android asynchronous okhttp

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 :(得分:0)

  

captcha = rc.getCaptcha();

您在收到请求后立即拨打电话。请求未执行,然后也没有结果。一切都是异步的。

只有onResponse()才能得到结果。很久以后。在onResponse()中,您应该通过在文本视图中显示结果来处理结果。