我想知道在我的Android应用中创建列表的好方法。我在我的数据库中有所有信息,并希望每次启动应用程序时从中加载数据并从中创建一个列表(id和title)。
最好的方法是什么?
我应该创建一个PHP脚本,它使用包含所有列表项的JSON编码数组进行响应,还是应该创建一个XML文件,每次数据库中的数据发生更改时,每次启动时都会导入到应用程序中?或其他任何好方法吗?
由于所有东西都是由android中的XML文件制作的,感觉导入XML会是一件好事,是吗?如何将XML文件从Web服务器导入应用程序?
// Daniel
答案 0 :(得分:1)
您可以使用JSON或XML。
您可以使用Web服务方法,也可以将数据库包含在您的应用程序中。
事实上,我经常选择创建我的数据的sqlite3数据库并将其包含在assets文件夹中,该文件夹可以在启动时复制到应用程序的数据文件夹中。
至于将sqlite3数据库从assets /复制到db数据目录,我发现these instructions有帮助。
答案 1 :(得分:0)
在您的情况下,我会选择JSON over XML,原因如下文所述:http://ajaxian.com/archives/json-vs-xml-the-debate
另外,在android中,默认情况下内置了JSON数组,因此您无需额外传递代码。
return new JSONArray("my json string goes here...");
由于我们讨论的是移动设备,因此我总是会在您的PHP脚本中生成更改,而不是完全同步,因为这将是完全同步的小得多。但是,如果适用于您的应用,则需要为用户提供完全重新同步的选项。我会使用SQLite数据库来存储数据,只更新其中的更改。
为了使流更小,你可以gzip压缩你的输出从PHP,因为这可以由Android设备本地读取。在我的应用程序中,我在传输之前将500kb压缩到~110kb,这大大节省了性能。这是一个如何读取流的部分示例:
InputStream in = null;
HttpURLConnection httpConn = null; // you will have to write your on code for this bit.
if (httpConn.getContentEncoding() != null)
{
String contentEncoding = httpConn.getContentEncoding().toString();
if (contentEncoding.contains("gzip"))
{
in = new GZIPInputStream(httpConn.getInputStream());
}
}
else
{
in = httpConn.getInputStream();
}
我希望这一切都有意义,这是漫长的一天编程:)
斯图