如何从webservice获取数据并将其存储在android的sqlite上



我已经从使用KSOAP2的webservice获得了响应。响应xml如下:

<env:Envelope
  xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:ns0="http://wsclient.xyz.com/">
 <env:Body>
  <ns0:getResponseData>
   <ns0:result>
    <ns0:wef> 12-June-2002 </ns0:wef>      
    <ns0:sblanguage> SOME TEXT.....</ns0:sblanguage>
    <ns0:payscale> 15700-400-19900 </ns0:payscale>
    <ns0:entrytakenby  xsi:nil="1"/>
    <ns0:entryHeader> PAY FIXATION</ns0:entryHeader>
    <ns0:postcadre   xsi:nil="1"/>    
   </ns0:result>
   <ns0:result>
    <ns0:wef> 20-JuLY-2010 </ns0:wef>      
    <ns0:sblanguage> SOME MORE TEXT.....</ns0:sblanguage>
    <ns0:payscale> 19700-600-22900 </ns0:payscale>
    <ns0:entrytakenby> CLERK </ns0:entrytakenby>
    <ns0:entryHeader> INCREMENT </ns0:entryHeader>
    <ns0:postcadre   xsi:nil="1"/>    
   </ns0:result>
   // .... hundreds of such results
   </ns0:getResponseData>
 </env:Body>
</env:Envelope>

我的目标是在一个片段上以表格形式显示所有这些信息。我已经为片段创建了UI,并为片段编写了一个CustomCursorAdapter。我已经成功地在片段上显示了虚拟数据(不是来自webservice)。现在我想知道

1)我如何从上面的数据创建一个游标,在CustomCursorAdapter的片段中使用它。

2)我知道,我必须使用sqlite来存储这些数据,以便它可以在没有互联网连接的情况下使用,一旦从web获取。我对实现这两个目标的步骤感到困惑。

请在这方面给我一些建议。我浏览了一些链接,但我能找到足够的信息把所有这些片段联系起来。

编辑:我不需要代码,但实现的策略将是有帮助的。我需要解析xml并将数据存储在对象中吗?然后使用对象填充数据库?这种情况是如何实现的?

你可以这样做…

1。将xml解析为所需的对象。这个链接应该可以帮助您解析响应。(我假设你得到的响应从web服务在这里使用AJAX或其他东西,你正在使用异步任务等。)http://developer.android.com/training/basics/network-ops/xml.html

2。然后可能创建一个类,例如XMLObjects,并将所需的数据存储为该类的对象。并将其存储到sqlite数据库中。(我猜使用了一些setter和getter方法)。

  1. 既然你想要离线使用这个。你可以让应用程序在一天中的某个时间点或应用程序启动时获得请求,并将其存储在sql lite数据库中。如果您需要知道如何将它们存储为对象或任何其他数据库函数,请参阅本教程http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

我认为唯一应该不同的部分是第一步,你必须解析xml,因为大多数人更喜欢使用JSON。剩下的步骤应该是非常简单和基本的。希望这对你有所帮助。

我认为你应该创建一个AsyncTask下载你所有的数据,之后,在你的onPostExecute,你可以保存你的数据在数据库中。通常,当您从XML或Json进行反序列化时,您会创建与数据关联的对象。因此,您可以创建帮助器方法,将这些数据插入到数据库中。然后,您可以使用游标显示ListView(或Fragment中的其他)中的数据。

您还可以尝试一种不同的策略:您可以为数据库创建一个侦听器,这样当数据添加到表中时,您的UI就会自动更新。为此,您可以考虑使用contenttobserver。所以,当你的AsyncTask下载你的数据,并把它们放在数据库中,自动填充ListView。

最新更新