2014-07-05 45 views
0

我在我的項目中工作,它有一個SQLLIT並與SQL-server交互。在我的服務器中,我想知道:如何創建一個服務來監聽我的sqllite表,並檢查任何表中是否有新記錄?它使用kso​​ap2將此記錄傳遞給服務器。如何在連接到服務器時使用KSOAP2的後臺服務?

另外我需要讓我的服務首先檢查是否有網絡可用或不可用。

回答

0

我相信你的SQLite表從一個活動改變(某種程度上需要某種用戶交互)。所以我建議以下方法:

  1. 一些聽衆,被稱爲每當表上執行任何CRUD操作創建一個SQLite表中。

    public class YourSqliteTable { 
    
    private TableListener listener; 
    
    public void insert(Object urData){ 
    
    //insert data here to sqlite table 
    // call the listener 
        listener.onInsert(urData); 
    
    } 
    } 
    
    public interface TableListener{ 
    
    public void onInsert(Object tableRow); 
    
    } 
    

2.創建一個處理SOAP消息並監聽SQLite表一個服務:

public class SoapService extend Service implements TableListener{ 

    private HanlderThread soapThread; 
    private Handler  soapHandler; 

    public void onCreate(){ 

     soapThread = new HandlerThread("handler_thread"); 
     soapThread.start(); 
     soapHandler = new Handler(soapThread.getLooper){ 

     public void handleMessage(Message msg) { 

      switch(msg.what){ 
       case(1)://send data to server 
       HttpTransportSE transporter = new HttpTransportSE(Server.TIGA_SERVER_IP 
                 + SOAP_URL); 
       SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
       SoapSerializationEnvelope sEnv = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

       try { 
        request.addProperty("data", msg.obj); 
        sEnv.dotNet = true; 
        sEnv.setOutputSoapObject(request); 
        transporter.call(NAMESPACE + METHOD_NAME, sEnv); 
        SoapObject response = (SoapObject) sEnv.getResponse(); 
        return response.toString(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally{ 
        transporter.reset(); 
       } 
       break; 
      } 
     } 

    } 

    @Override 
    public void onInsert(Object tableRow){ 

     Message msg = new Message(); 
     msg.what = 1; 
     msg.obj = tableRow; 
     soapHandler.sendMessage(msg); 
    } 

} 
  1. 綁定用戶活動到SoapService並建立綁定時(onServiceConnected是稱爲)將該服務註冊爲SQLite表的偵聽器。

  2. 檢查,如果Internet連接可用是可以做到:

    公共布爾isNetworkOn(){

    ConnectivityManager conMan = (ConnectivityManager) 
              getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo activeNet = conMan.getActiveNetworkInfo(); 
    
    if(activeNet == null) 
        return false; 
    
    if(activeNet.isAvailable() && activeNet.isConnected()) 
        return true; 
    
    return false; 
    } 
    
+0

對不起,我遲到,我會做什麼ü做,如果我會告訴ü我有任何的觀點 – user3806961