0

现在我正在使用 Web 服务检索存储在服务器中的图像和文本。我正在使用 SOAP 来使用它。但问题是每次我打开应用程序时,它都会一次又一次地开始加载。这是因为在 Activity 的 oncreate 方法中,我调用了 asynctask,它在后台加载数据。

我想按照这样的顺序实现,首先我将从 web 服务中检索数据,然后将它们显示在我的应用程序中。现在,如果我关闭我的应用程序并再次打开它,或者当时没有连接互联网,它应该显示上次会话期间加载的数据。如何实现这个????请分享你的想法

感谢并提前

4

5 回答 5

1

您可以使用磁盘缓存从远程服务缓存位图,有关如何在 Google 开发人员网站http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html上执行此操作的更多信息

这将允许您存储图像并在没有连接时立即显示,或者您想在加载远程图像的同时加载图像。

根据您需要存储的文本,您可以将文本与缓存中的图像相关联,或者使用数据设置一个 ArrayList 并存储到磁盘。这里有一些更多细节在Android中缓存数据的最佳方式

最后,还有一些工具可以确保您充分利用网络代码,例如 AT&T ARO 工具,运行该工具将帮助您通过将网络调用减少到最低限度来优化您的应用程序。见http://developer.att.com/aro

于 2013-03-06T11:50:41.343 回答
0

如果你想实现类似的东西..你应该为你的应用程序创建一个数据库,这样当你关闭你的应用程序时你的数据就不会被删除。

因为如果您的应用程序不是活动应用程序,则使用其他所有选项时,GC 可能会删除您的数据。

那么您应该创建一个服务,该服务将在每个指定的时间运行,并检查互联网连接,如果找到,则检查服务器中是否有新数据。

于 2013-03-04T08:25:31.473 回答
0

Android 实现了MVC ( Model-View-Controller ) 模式,您只需重用(在大多数情况下)现有的View类并实现您的ControllerModel。您的 Activity 是一个Controller。但下载数据等操作应该由Model完成。

因此,您必须为能够在 Activity 破坏和创建(特别是在方向改变时发生)中幸存的数据创建一个类。

AsyncTask从 an调用 anActivity是完全错误的。

此外,请记住,在某些情况下,Android 可能会终止并重新启动应用程序进程,从而导致 RAM 中保存的任何数据丢失。(不过,您肯定会看到onPause()通知。)但是您的应用程序必须能够从此类重启中恢复。请参阅onSaveInstanceState(Bundle)和 中的 Bundle 参数 onCreate (Bundle savedInstanceState)

另外,请参阅: AsyncTask 在概念上真的存在缺陷还是我只是遗漏了什么?

于 2013-03-04T09:21:50.700 回答
0

如果您想再次“重用”这些图像,您可以考虑将它们缓存到设备 SD 卡中。例如:

FileOutputStream outFile = new FileOutputStream(path);
image.compress(Bitmap.CompressFormat.JPEG, 100, outFile);
outFile.close(); 

然后从 sd 卡接收文件并通过某些逻辑(例如,检测设备是否连接到 Internet 等)BitmapFactory可能在您的活动方法中对其进行解码:onResume()

File imageFile = new File(path);
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());

记得添加访问 SD 卡的必要权限 :)

于 2013-03-04T09:01:42.583 回答
0

我认为如果您更改设备的方向,也会发生相同的行为。这是因为在重新创建应用程序时,会调用相同的方法。onCreate()您应该在加载图像的函数内设置一个标志,然后在onResume()方法中检查是否设置了标志并停止调用该函数。看看是否有帮助。

干杯

于 2013-03-04T08:27:47.977 回答