2012-01-27 83 views
0

我正在android应用程序上工作,其实我是android中的新手。如何使用android服务定期在后台调用Web服务?

在我的应用程序中,我正在使用SQLITE数据库进行数据存储。

但我想打电话给一些的.NET Web服务,以获得新的数据,然后想用新的数据更新SQLite数据库。

我想要做这个任务中使用Android服务在后台每24小时。

基本上我需要两个服务一个用于获取数据,一个用于更新数据。

所以我的问题是我应该如何创建这些服务,我应该在哪里放置代码来启动服务并停止服务。

我需要在后台完成整个任务,并且我还需要在启动服务之前检查互联网连接。

伙计们请帮帮我,如果可能,请提供代码。

回答

1

你必须为每个服务的一个获取数据和一个创建不同的线程像这样

final Handler handlerStartup = new Handler() { 

       @Override 
       public void handleMessage(Message msg) { 

        super.handleMessage(msg); 

        Change the UI of your activity in handler here 

       } 

      }; 
    new Thread() { 

       public void run() { 
        callWebService(url); 
        handlerStartup.sendEmptyMessage(0); 

       } 

      }.start(); 

这样你就必须创建另一个线程为您的其他服务中插入数据,如果你试图改变UI在线程有你面对窗口泄漏故障的问题

       OR 

有你调用Web服务类,在doBackground方法扩展的AsyncTask您调用Web服务的另一种方式

而且代码用于检查网络连接是下面

public class AppStatus { 


    private static AppStatus instance = new AppStatus(); 
    ConnectivityManager connectivityManager; 
    NetworkInfo wifiInfo, mobileInfo; 
    static Context context; 
    boolean connected = false; 


    public static AppStatus getInstance(Context ctx) { 

     context = ctx; 
      return instance; 
    } 



public Boolean isOnline(Context con) { 


try { 
     connectivityManager = (ConnectivityManager) con 
         .getSystemService(Context.CONNECTIVITY_SERVICE); 


     NetworkInfo networkInfo = connectivityManager 
         .getActiveNetworkInfo(); 
     connected = networkInfo != null 
         && networkInfo.isAvailable() && networkInfo.isConnected(); 
     return connected; 


} catch (Exception e) { 
     System.out.println("CheckConnectivity Exception: " + e.getMessage()); 
     Log.v("connectivity", e.toString()); 
} 


return connected; 
} 
} 

何地u需要检查是否有数据连接或不写

如果(!AppStatus.getInstance(本).isOnline(这本)){

 AlertDialog.Builder builder = new AlertDialog.Builder(
       LoginActivity.this); 
     builder.setTitle("No Internet"); 
     builder.setIcon(android.R.drawable.ic_dialog_alert); 
     builder.setMessage("Can't access Server"); 
     builder.setPositiveButton("ok", 
       new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 

         dialog.dismiss(); 
         return; 

        } 
       }); 

     AlertDialog diag = builder.create(); 
     diag.show(); 
     Log.v("Home", "############################You are not online!!!!"); 
    } 
+0

你在哪里提到了一段时间后,Web服务将被一次又一次地调用? – 2014-08-26 11:50:09