安卓线程通信问题

发布于 2022-09-04 19:17:07 字数 1663 浏览 11 评论 0

我这里有一段网络请求的代码,执行后会返回一个字符串数组,但是请求与返回结果的赋值是在线程里完成的,每次返回都为空,请问如何保证在获取请求结果后返回呢

    public List<String> requestFileList(final int fileType) throws IOException {
        final List<String> fileList=new ArrayList<String>();
        new Thread(new Runnable() {
            @Override
            public void run() {
                RequestBody formBody = new FormBody.Builder()
                        .add("fileType", String.valueOf(fileType))
                        .build();
                OkHttpClient okHttpClient = new OkHttpClient();
                Request request = new Request.Builder()
                        .url(FILE_LIST_URL)
                        .post(formBody)
                        .build();
                Call call = okHttpClient.newCall(request);
                String resultJson = "";

                Response response = null;
                try {
                    response = call.execute();
                    resultJson = response.body().string();
                    JSONArray jsonArray = new JSONArray(resultJson);
                    for(int i=0;i<jsonArray.length();i++){
                        fileList.add(jsonArray.getString(i));
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                if (response.isSuccessful()) {

                    Log.v("FileList",String.valueOf(fileList.size()) );
                }
            }
        }).start();

        return fileList;   //这里调用该函数的位置总是接到size=0的List
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

執念 2022-09-11 19:17:07

正常应该不像你这么写吧,在子线程中,网络请求完毕,你可以使用Handler,将返回值传给主线程,在主线程中处理数据,你可以选择弹出一个progressDialog,然后网络请求完毕,关闭,用户体验更好一点。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文