java - Java:在主线程中等待额外方法中的响应监听器

标签 java android multithreading

因此,我正在编写一个android应用程序。在 Activity 的OnCreate()期间,我通过HTTP GET请求一些JSONObjects。该方法具有一个响应监听器,该监听器在获取JSONObject时会执行某些操作。在OnCreate方法中,我需要使用响应,因此我可以以某种方式对其进行设置,以便OnCreate方法等待响应监听器完成工作吗?
我必须使用多线程吗?这是我正在谈论的代码:

这是OnCreate()中的调用:

...
// Instantiate the RequestQueue.
final RequestQueue queue = Volley.newRequestQueue(this);
executeJson(QUERY_URL);

System.out.println(jsonresponse);
...

这是被调用的方法:
private void executeJson(String url) {
    SharedPreferences prefs = this.getSharedPreferences("AppPref", MODE_PRIVATE);
    final String token = prefs.getString("token", null);
    RequestQueue queue = Volley.newRequestQueue(this);
    Map<String, String> params = new HashMap<String, String>();
    System.out.println(token);
    params.put("access_token", token);
    CustomRequest jsonRequest = new CustomRequest(url, params,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    jsonresponse = response;
                }
            }, this.createRequestErrorListener());
    System.out.println(jsonRequest);
    queue.add(jsonRequest);
}

我意识到,简单的Thread.Sleep()会使我的应用完全进入休眠状态,因此这不是解决方案。

该 Activity 的目的是成为“加载 Activity ”-一旦用户想要访问他的数据并为该数据 Activity 创建一个意图,它就会弹出,并在加载数据后将其自身销毁。

最佳答案

是的,您需要在后台线程中执行请求。使用AsyncTask或其他方法。您不想在UI线程上执行任意长时间运行的请求,也不想“暂停” UI线程以等待请求返回。阅读Android Processes and Threads以获取更多有关在Android中使用线程的信息。

关于java - Java:在主线程中等待额外方法中的响应监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31881533/

相关文章:

java - 许多线程等待锁定对象,但没有线程持有该锁

java - 当单击我的按钮时,应用程序停止并在 android java 中出现错误

java - 仅在 out 文件夹和 gradle 运行中无法识别资源

java - Java 中有 "worker"

java - 如果发生异常,Java 线程是否需要清理

我可以在没有 fork 的情况下执行 shell 或系统调用吗?

java - 从 R 中获取带有字符串的 id

Android 调用转移和电话 session

android - 具有无限高度内的 gridView 的 ListView

Android webview 允许使用当前的 Android Studio 访问相机