Android等待截击完成并稍后更新用户界面

标签 android android-volley

我正在使用 volley 包从网站 (JSON) 检索数据。

这是我的方法

  private void getEarthquakeList(){
        // ...

        // Instantiate the RequestQueue.
        RequestQueue queue = Volley.newRequestQueue(this);
        //Earthquake Feeder
        String url ="https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.geojson";

        // Request a string response from the provided URL.
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("Response is: ",response);
                        //Parsing Json
                        parseJson(response);
                        final ListView earthquakeListView = (ListView)findViewById(R.id.list);
                        //Sort the array according to magnitude
                        earthquakeArrayList.sort((a, b) -> Double.compare(b.getTime(), a.getTime()));
                        mAdapter = new EarthquakeAdapter(getApplicationContext(), earthquakeArrayList);
                        earthquakeListView.setAdapter(mAdapter);

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("Error",error.getMessage());
            }
        });

        // Add the request to the RequestQueue.
        queue.add(stringRequest);
    }

问题是,现在我正在该方法返回响应后更新 UI。

这些是行

//Sort the array according to a date
earthquakeArrayList.sort((a, b) -> Double.compare(b.getTime(), a.getTime()));
mAdapter = new EarthquakeAdapter(getApplicationContext(), earthquakeArrayList);
earthquakeListView.setAdapter(mAdapter);

当我在 MainActivity 中运行时没有问题,用户打开应用程序并获取地震列表。

当我想切换到我每隔几分钟监控一次的服务时,或者当网站内容发生变化时,问题就开始了。 所以我想要我的方法而不更新其中的 UI。 问题是,如果我不更新 onResponse 内的 UI,UI 线程将继续并导致一个空数组。

所以如果我不在里面做这个数组earthquakeArrayList 保持空

public void onResponse(String response) 

想法如何将两者分开,一方面运行方法并获取数据,另一方面主线程将能够访问数据而不是完成执行。 谢谢 EG

最佳答案

目前推荐的解决方案是使用 LiveData . LiveData 适用于 Observer Pattern ,因此您可以让任意数量的观察者观察服务和 Activity 中的更新数据,但他们需要处于相同的上下文中。这些主题有点高级,但却是将 UI 与数据层分离的好方法。你可以通过这两个链接

关于Android等待截击完成并稍后更新用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53911606/

相关文章:

android - 如何将 Android SpeechRecognizer 作为服务使用?

android - 如何使用 Google API 构建 Android 源代码?

android - flutter - UI 更改仅在点击另一个元素时生效

android - 自动重复 Android Volley 请求的最佳做法是什么?

android - Android Volley 如何处理暂时失去网络连接?

android volley发布json ID并从PHP服务器返回结果

Android:动态创建的NetworkImageView的宽度和高度返回零

android - 使用 Android FacebookSDK v3 获取 App Access Token

java - 如何在 Android Studio 中使用暂存文件?

android - 尝试调用虚拟方法 'int java.lang.String.hashCode()'