我有一个ListView
包含MainActivity
中来自RSS Feed的新闻,问题是每次打开应用时都必须流式传输RSS Feed,因为ListView
的项目已被销毁当我关闭应用程序时。
我知道我可以暂时将其保存在SQLite中,但是有一种更简单的方法来保存ListView布局,以便下次打开应用程序时它仍然存在吗?
答案 0 :(得分:0)
我认为建议无论如何都要将数据保存在数据库中。 但是你有另一种保存方式,它在SharedPrefernces中。 我不认为这实际上是最简单的方式......
答案 1 :(得分:0)
嗯,我会使用Volley库来缓存请求,我想这很简单:你做请求,下次首先从缓存中获取它。您不必明确保存和描述用于存储此案例数据的模型。
下面,我举了一个示例:
public class RSSProvider {
private final RequestQueue mRequestQueue;
// ...
private RSSProvider(Context context) {
mRequestQueue = Volley.newRequestQueue(context.getApplicationContext());
}
// ...
public void getSomething(final Response.Listener<String> responseListener, final Response.ErrorListener errorListener) {
if (mRequestQueue.getCache().get(<URL>) != null) {
responseListener.onResponse(new String(mRequestQueue.getCache().get(<URL>).data));
} else {
StringRequest request = new StringRequest(Request.Method.GET, <URL>, responseListener, errorListener);
request.setShouldCache(true);
mRequestQueue.add(request);
}
}
// ...
}
答案 2 :(得分:0)
另一种选择是使用SharePreferences和Gson将列表视图的数据源转换为存储字符串,然后在重新打开应用程序时,您可以非常快速地使用存储的数据重建列表视图。我在一个应用程序中执行类似操作,其中列表视图的数据源是LinkedHashMap项的ArrayList,因此这将是将ArrayList转换为String然后在需要时返回到ArrayList的两种方法
public static String ArrayListToString(ArrayList<LinkedHashMap> list) {
return gson.toJson(list);
}
public static ArrayList<LinkedHashMap> StringToArrayList(String input) {
Type collectiontype = new TypeToken<ArrayList<LinkedHashMap>>(){}.getType();
ArrayList<LinkedHashMap> list = gson.fromJson(input, collectiontype );
return list;
}
我还建议存储时间戳,以便检查是否应显示存储的列表或是否需要检索更新的列表
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.clientListView)
...whatever other setup you want to do here
CheckTimeStamp();
}
public static void CheckTimeStamp() {
String timeStamp = preferences.getString("keyClientTimeStamp", "");
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
String currentTime = HelperClass.GetSimpleDateFormat(date);
if (currentTime.equals(timeStamp)) {
String storedString = preferences.getString("keyStoredClients", "");
clientArrayList = HelperClass.StringToArrayList(decryptedArray);
//the setupView method is where I take my ArrayList
//and add it to my ListView's Adapter
SetupView();
}
else {
SharedPreferences.Editor editor = preferences.edit();
editor.putString(Constants.keySalesTimeStamp, currentTime);
editor.apply();
//for me this is a web service that get's a list of clients,
//converts that list to a String to store in SharedPreferences
//and then calls SetupView() to add the list to the ListView Adapter
GetClientList();
}
}