当来自另一个意图时,如何防止再次加载数据。例如,我有一个MainActivity
,正在onCreate()
方法中对API进行GET调用。我单击其中一张卡,它会触发另一个名为CardActivity
的活动。
当我从该CardActivity
中回击时,数据再次被加载。我也尝试过onPause()
方法,但是没有运气。在活动之间导航时,如何防止加载的数据。
有人可以指导我如何实现这一目标吗?
我正在使用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缓存,可以参考这个连结。
另一种方法是通过在活动之间作为对象传递数据。如果在活动过渡期间数据不太可能更改,那么我认为这是个好主意。这样,您不必每次都从网络加载数据。因此,一旦在MainActivity
中读取了数据,就可以将其作为对象或意图传递给CardActivity
。