如何将在另一个类中获取的网络数据返回到Android MainActivity?

时间:2018-08-22 20:36:42

标签: java android okhttp okhttp3 oncreate

在MainActivity onCreate中,我使用okhttp3调用网络类来处理请求。我需要从网络类返回数据,以便在调用类MainActivity中进一步使用逻辑。在调试中,来自网络类的返回数据是正确的,但是当我要在MainActivity的另一个表达式中使用返回数据时,返回数据将为null。

//In MainActivity
Network n = new Network();
n.network("baseLogic", "user", params);


if(n.resp == null){
        String resp = n.resp;
        Toast toast = Toast.makeText(getApplicationContext(), resp, Toast.LENGTH_SHORT);
        toast.show();
    }else if (n.resp.equals("0")) {
        Intent intent = new Intent(MainActivity.this, Rei.class);
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }

下面是从MainActivity内部调用的网络类。 我们从传递的参数中构建了一个URL。 返回值存储在响应时的类变量中,然后由类返回。

public class Network(){

public String resp;

    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .url(url)
            .build();

    //resp = client.newCall(request).execute().body().toString();

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

        }

        @Override
        public void onResponse(okhttp3.Call call, Response response) throws IOException {
            if (!response.isSuccessful()) {
                throw new IOException("Unexpected code " + response);
            }
            resp = response.body().string();
            response.close();
        }

    });

    return resp;
}

调试显示出价值差异 enter image description here

尝试的解决方案: 1)我试图找到一种方法或进程(android启动画面)来暂停MainActivity线程,以便Network类实例可以按时返回MainActivity的数据。 2)剥离任务或asyncTask上的网络类实例。

请帮助

0 个答案:

没有答案