2012-01-27 88 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