【问题标题】:how to get data from webservice and store that on sqlite in android?如何从 web 服务获取数据并将其存储在 android 的 sqlite 上?
【发布时间】:2014-08-04 17:29:09
【问题描述】:

我已经使用 KSOAP2 从 web 服务获得响应。响应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。我已经成功地在片段上显示了虚拟数据(不是来自 web 服务)。现在我想知道

1) 如何根据上述数据创建光标,以便在片段的 CustomCursorAdapter 中使用该光标。

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

请给我一些关于这方面的建议。我浏览了一些链接,但可以获得足够的信息将所有这些部分链接在一起。

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

【问题讨论】:

  • 有些人可能会否决认为问题是通用问题或认为缺乏试验或出于任何原因的问题。但它是一个让一些初学者瘫痪的编程问题。因此,如果您能在投票后提供答案,我将不胜感激。:)

标签: android web-services sqlite android-contentprovider ksoap2


【解决方案1】:

这可能是你可以做的事情..

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

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

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

  2. 并且可以使用自己的游标访问数据库。

我认为唯一应该不同的部分是您必须解析 xml 的第一步,因为大多数人更喜欢使用 JSON。其余步骤应该非常简单并且非常基本。希望这可以帮助。如果您需要有关任何特定步骤的更多详细信息,请发表评论。

【讨论】:

    【解决方案2】:

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

    您还可以尝试不同的策略:您可以为您的数据库创建一个侦听器,以便在您的表中添加数据时,您的 UI 会自动更新。为此,您可以考虑使用ContentObserver。因此,当您的 AsyncTask 下载数据并将它们放入数据库时​​,会自动填充 ListView。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      相关资源
      最近更新 更多