在android上同步数据

时间:2013-08-23 06:30:15

标签: android web-services android-asynctask sync getjson

目前,我正在使用Android应用程序,该应用程序使用公共IP地址显示本地服务器的报告。我已经设计了Web服务(C#)来从我的服务器访问SQL Server中的数据。此外,我已经从移动端准备好了app和sqlite数据库,系统可以很好地处理我已经转储到sqlite上的示例数据。但是,我希望用户定期(每周一次)使用webservice或任何首选方法从我的服务器更新/同步数据到移动设备上的sqlite数据库。

但是,我不知道如何从服务器发送/接收最新数据并在移动端更新sqlite而不会中断用户。有时,用户也应该能够自己检查更新。我已经阅读了有关JSON和帐户身份验证的信息,但无法获得有关如何访问我的服务器(使用公共IP)和更新数据的概念。

处理我情况的最佳方法是什么?任何可以告诉我如何进行同步的参考或教程?

提前致谢

我试过这个,但由于某种原因它崩溃了:

    public void syncClickHandler(View view) 
    {
        AsyncCallWS task=new AsyncCallWS();
        task.execute();
    }

private String response="";

private class AsyncCallWS extends AsyncTask<String, Void, String> 
{
    @Override
    protected String doInBackground(String... params) {
        response=Connect.Hello("TestName","Hello");
        if(response!=null)
            return response;
        return "Nothing returned!";
    }

    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(getBaseContext(), result ,Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}

访问网络服务的类:

    private static String NAMESPACE = "http://tempuri.org/";
private static String URL = "http://10.0.2.2:1674/Services.asmx";
private static String SOAP_ACTION = "http://tempuri.org/";

    public static String Hello(String name, String webMethName) 
{
    String resTxt = null;

    SoapObject request = new SoapObject(NAMESPACE, webMethName);

    PropertyInfo pi= new PropertyInfo();

    pi.setName("name");

    pi.setValue(name);

    pi.setType(String.class);

    request.addProperty(pi);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;

    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try 
    {
        androidHttpTransport.call(SOAP_ACTION+webMethName, envelope);

        SoapObject response = (SoapObject)envelope.getResponse();

        String n = "";

      Object property = response.getProperty(0); 
          if (property instanceof SoapObject) { 
            SoapObject countryObj = (SoapObject) property; 

            n=countryObj.getProperty("name").toString(); 
          } 

        resTxt=n;

    } catch (Exception e) {
        e.printStackTrace();
        resTxt = "Error occured";
    } 

    return resTxt;
}

可能是什么问题?

3 个答案:

答案 0 :(得分:0)

此链接非常有用且指导得很好Ksoap + Webservice Access

修改

您应该使用异步任务来访问网络服务Async Task

希望它可以帮助你。

答案 1 :(得分:0)

看看朋友,它很简单;您只需创建一个同步按钮,用户将单击该按钮。您使用C#Web服务并将它们放入设备的本地sqlite数据库中。从服务器收到一组新数据时,只需删除设备中的现有本地表,然后从Web服务中插入新获取的数据。 Web服务的响应可能是JSON或XML。

应使用异步任务完成对Web服务的请求。

答案 2 :(得分:0)