目前,我正在开发 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;
}
可能是什么问题呢?