java - 在 Activity 之间导航时如何保留数据而不加载数据

标签 java android android-volley

如何防止来自另一个 Intent 时再次加载数据。例如,我有一个 MainActivity,我在 onCreate() 方法中对 API 进行 GET 调用。我单击其中一张卡片,它会触发另一个名为 CardActivity 的 Activity 。

当我从此 CardActivity 返回时,数据将再次加载。我也尝试了 onPause() 方法,但运气不佳。如何防止在 Activity 之间导航时加载数据。

有人可以指导我如何实现这一目标吗?

我正在使用Volley库进行HTTP调用。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        requestQueue = MySingleton.getInstance(this.getApplicationContext()).getRequestQueue();

        getRedditDefaultData();
        getGoogleHeadlinesData();

    }

    private void getRedditDefaultData() {

        final String url = "https://example.com"

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
                (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                                ...
                                dataset.add(new StaggeredCustomCard(
                                        redditUserProfilePic,
                                        redditUserName,
                                        redditPostDateTime,
                                        redditPostTitle,
                                        null,
                                        redditPostDescription));
                            }
                            if (dataset != null) {
                              staggeredGridAdapter.notifyDataSetChanged();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // TODO: Handle error
                        progressBar.setVisibility(View.GONE);
                    }
                });
        retryPolicy(jsonObjectRequest);
       MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);
    }

最佳答案

这个问题有很多可能的答案。您可以将数据本地存储在 SQLite 数据库中,然后可以在需要时从那里读取数据。如果您的数据可能经常更改,那么这不是一个好主意。您可以考虑使用 Volley 附带的缓存系统。要了解Volley的缓存是如何实现的,可以引用this link

另一种方法是将数据作为对象在 Activity 之间传递。如果数据在 Activity 转换期间不太可能发生更改,我认为这是一个好主意。这样,就不用每次都从网络加载数据了。因此,一旦在 MainActivity 中读取数据,就可以将其作为对象或 Intent 传递给 CardActivity

关于java - 在 Activity 之间导航时如何保留数据而不加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58332552/

相关文章:

java - 为什么 IF 和 ELSE 情况都被执行?

android - 让 Robolectric 与 Volley 一起工作

android - Volley+ OkHttpClient 为什么要同时使用?

带有 header 和正文的 Android Volley POST 请求

java - 如何在java中将两个不同的excel文件连接为同一服务器上的数据库?

java - 如何为 temp (WindowAdapter) 创建或分配方法?

java - 读取文件时无限循环

java - 在java中确定文件的mime类型的最佳方法?

android - Android 上的 Kotlin 可关闭和 SQLiteDatabase

android - 在 Android 8.1.0 上屏幕关闭时 BLE 扫描不起作用