从服务器加载数据的最佳实践(Android App)

时间:2014-03-25 16:22:04

标签: android database web-services sqlite

我正在构建一个Android应用程序,它应该:
显示从Internet中的服务器加载的一些数据。

目前,我的应用中使用了一个本地SQliteDB,用于存储数据,应显示该数据。我使用它,因为我希望能够显示数据,即使暂时没有可用的互联网连接。

下一步我将致力于从互联网服务器在本地SQliteDB中插入数据。我想过这样做:

应用启动时,请检查互联网是否可用。如果是,请连接到Web服务(包括用户名和密码)。 Web服务应该通过json对象将必要的数据传递给应用程序,我将更新本地SQlite数据库。

我的问题:
这是个好主意吗?
有没有更好的方法呢?

Zend网站也可以查看(和编辑)数据。

提前致谢。

祝你好运 丹尼尔

3 个答案:

答案 0 :(得分:2)

你说它的方式似乎是最佳的。也许你应该设置一个标志或警报,这是时间或日期相关..如果应用程序启动太多次没有互联网。

  

>> 对于移动应用的更新,您应该考虑在服务器和应用上拥有相同数据的优先级/紧迫性。

> 为了更好的方法,您可以选择更适合您需求的方式。

在一个线程中获取数据并在另一个线程中呈现

1。撰写自定义Asynctasks
http://developer.android.com/reference/android/os/AsyncTask.html
AsyncTask Android example

2。使用类似AsyncHttpClient的内容:http://loopj.com/android-async-http/
您可以使用onSuccessonFailure方法处理响应。

选项 2。更好,如果您只想获取数据而不做任何其他事情,并对其进行处理或保存。同样,您需要先解析响应。

解析您的数据:
由于您的回复是JSON格式,因此最好使用Gson来映射数据和使用自定义模型类。例如:

    Gson gson = new Gson();
    ModelClass modelClass= new ModelClass();
    modelClass= gson.fromJson(responseContent,ModelClass.class); 
//where responseContent is your jsonString
    Log.i("Web service response", ""+modelClass.toString());

更多信息:https://code.google.com/p/google-gson/

对于命名差异(根据webservice中的变量),可以使用注释等 @SerializedName

对每个循环使用a来验证/浏览/访问将作为模型类的对象/字段填充的数据:
检查这些是否有疑问:
http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html
How does the Java 'for each' loop work?

现在关于保存数据:

  

>> 这很大程度上取决于服务器的数据以及您要存储的数据量。

在Android存储选项中:
http://developer.android.com/guide/topics/data/data-storage.html

a。共享偏好设置:
这些对于保存/存储数据是有利的,这些数据的大小相对较小并且可以被频繁地覆盖和获取。 例如用户名,当前用户的详细信息,密码
http://developer.android.com/reference/android/content/SharedPreferences.html
How to use SharedPreferences in Android to store, fetch and edit values

b。维护数据库适用于您应用中需要的较大块。
您可以根据需要存储,更新或覆盖数据。可以存在多个表或更多数据可以存储在各个领域中 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
http://www.vogella.com/tutorials/AndroidSQLite/article.html

当您使用Gson时,您还可以选择填充模型类的对象,然后将该响应存储在String中(可能在SharedPreferences中,具体取决于长度/大小)使用gsonToJson方法。我已经习惯了,厚脸皮但有效。

您还需要考虑其他内容,包括UI和内存优化,ListViews或布局等,具体取决于您的应用及其控制流程。

答案 1 :(得分:0)

您可以启动一个帖子并获取有关加载应用的新数据。如果你决定这条路径,我们使用Volley项目获得了很好的JSON结果。

您可以在此处查看http://www.javacodegeeks.com/2013/06/android-volley-library-example.html

并在此处获取代码 https://android.googlesource.com/platform/frameworks/volley/

答案 2 :(得分:0)

尝试使用此库: - https://github.com/Abhishekpalodath/FetchServerUtil-Android.git。 您还可以使用此功能从服务器加载实时数据。