0

目前,我正在开发 android 应用程序,该应用程序显示来自我的本地服务器的具有公共 IP 地址的报告。我已经设计了 Web 服务 (C#) 以从我的服务器访问来自 SQL Server 的数据。此外,我已经从移动端准备好了应用程序和 sqlite 数据库,并且系统可以很好地处理我已经转储到 sqlite 上的示例数据。但是,我希望用户使用 web 服务或任何首选方法从我的服务器定期(每周一次)更新/同步数据到移动设备上的 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;
}

可能是什么问题呢?

4

2 回答 2

0

http://codeoncloud.blogspot.in/2012/04/android-403-webservice-access-tutorial.html

希望以上链接对您有所帮助。

于 2013-08-23T06:47:33.123 回答
0

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

网络服务请求应使用异步任务完成。

于 2013-08-23T06:43:57.580 回答