当我启动我的android应用程序时,它会从mainactivity中的服务器加载大量数据,并使用listView进行调整,并在单击listview时启动新的活动。当从当前活动返回到mainactivity时,我的应用程序再次从以前加载的服务器加载数据?如何在下次返回相同的活动后使用第一次加载的数据?如何从其他活动返回后恢复任何活动中的数据?
回答
你可以简单地使用一个http客户端缓存像OkHttp。在某些情况下更复杂但更合适的是管理内部Sqlite Database。
作为一面说明您可以保存所有数据并在重新加载活动时加载它,但不应该。不管你选择什么方式,IO都会参与进来,如果你的数据足够大,它将会是一个沉重的操作。
它是一个很好的实践,可以正确加载活动在加载时需要显示的内容,而不是完整的数据。您应该使用CursorLoader或CursorAdapter来动态加载用户与其交互时所需的活动...
当然我用sqlite数据库来存储本地,我的问题是每次活动启动它从数据库加载数据??数据库是脱机还是联机?我的问题是我可以将数据存储在我的应用会话中? –
可以请你解释一下如何在Facebook应用程序中轻松处理帖子? –
@RoshanSharma这是一个完全不同的问题 –
您可以将服务器响应缓存为JSON形式的共享首选项,并存储以避免每次都进行服务器调用。 (然而,这是建议,只有当数据小)
例子:
public <T> void putJsonIntoSharedPreferences(String key, T object) {
SharedPreferences sharedPreferences = getSharedPreferences();
SharedPreferences.Editor edit = sharedPreferences.edit();
String json = convertToJson(object);
edit.putString(key, json);
edit.commit();
}
public <T> T getFromSharedPreferences(String key, Class<T> clazz) {
SharedPreferences sharedPreferences = getSharedPreferences();
final String fromSharedPreferences = sharedPreferences.getString(key, "");
T object = null;
if (!fromSharedPreferences.equals("")) {
try {
object = JsonConverter.fromJson(fromSharedPreferences, clazz);
} catch (IOException e) {
return null;
}
} else {
try {
return clazz.newInstance();
} catch (Exception e) {
return null;
}
}
return object;
}
private <T> T fromJson(String json, Class<T> clazz) throws IOException {
ObjectMapper objectMapper = getObjectMapper();
if(json!=null)
return objectMapper.readValue(json,clazz);
return null;
}
private String convertToJson(Object object) {
ObjectMapper objectMapper = new ObjectMapper();
String string = null;
try {
string = objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
Log.d(ComponentConstants.JSON_PARSE_ERROR_TAG,e.getMessage(),e);
}
return string;
}
从JSON解析和填充到SharedPreferences可能是非常繁重的操作。强烈建议不要这样做。 –
@OfekRon:完全同意你的意见,更新了我的答案。 –
有几种可能的方法,您的问题取决于你想要做什么。首先,在您下载和处理数据的活动中,您应该覆盖方法onSaveInstanceState
和onRestoreInstanceState
,以便您的数据可以持久保存并保持方向更改(而不会松散您处理数据的工作)。
如果您的应用程序只是从主要活动中打开详细活动,那么当您按回时,您的数据将可用。你不必重新加载任何东西。如果情况并非如此,那么在活动的生命周期中如何加载数据可能存在一些问题(例如,避免在onStart/onResume
方法中加载和处理数据)。
如果您希望在应用程序死亡后保留数据,您可以像其他人指出的那样,使用http缓存(例如使用OkHttp)或使用Sqlite数据库。这些方法也可以结合使用以获得额外的性能收益。
- 1. 对话框活动还会在后台恢复其他活动
- 2. 返回后恢复活动状态
- 3. 如何在调用其他活动后恢复状态?
- 4. 从DialogFragment返回其他活动的值
- 5. 如何在从其他活动回来后保留活动中的值
- 6. 从其他活动返回文本
- 7. 如何恢复活动?
- 8. 如何恢复活动div
- 9. 如何从另一个活动中的RadioGroup中恢复数据?
- 10. 活动从相机活动返回后丢失数据
- 11. 数据如何存储在一个活动中,然后用于其他活动?
- 12. 如何从其他活动启动Android AppWidget的配置活动?
- 13. 如何从其他活动启动启动器活动?
- 14. 播放/暂停YoutubePlayer后活动从后台恢复活动
- 15. 获取java.lang.IllegalStateException:恢复活动时没有任何活动
- 16. 如何从其他活动更新活动的适配器?
- 17. 如何从android中的其他活动获取数据?
- 18. Android:从其他活动完成活动
- 19. 从其他活动完成活动
- 20. 如何从儿童活动中返回家庭活动?
- 21. 从活动恢复IntentService
- 22. 按钮返回到其他活动
- 23. 从其他活动返回后,DialogFragment消失
- 24. 从其他活动返回后,android surfaceview不再可见
- 25. 如何从其他活动重新加载活动
- 26. 如何将图像从活动发送到其他活动?
- 27. 如何从其他活动更新ListView
- 28. 我如何dynmaicly从其他活动
- 29. android返回到活动状态后恢复edittext的状态
- 30. 发送数据返回到其他活动打开的当前活动的上一个活动
您需要将状态或数据本身存储在数据库中,并通过这样做来恢复活动 –
时进行检查,我是否可以将此先前提取的数据适配到第二个列表视图中? –
你需要再次填充数据到列表视图,时间将取决于你的数据的大小 –