如何防止来自另一个 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/