I'm working in my project which has a SQLLIT and interacts with SQL-server
. In my server I want to know: how can I make a service that listens to my sqllite
table and checks if there is a new record in any of tables? It's passing this record to server using ksoap2.
Also I need to make my service first check if there is a network available or not.
I believe your SQLite table changes from an activity (somehow requires some sort of user interaction). So i would suggest the following approach:
Create a SQLite table with some listeners that are called whenever the table performs any CRUD operation.
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.create a service that handles soap messages and listens to SQLite table:
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);
}
}
Bind the user activity to the SoapService and when binding is established (onServiceConnected is called) register the service as a listener to the SQLite table.
Checking if internet connection is available can be done as :
public boolean 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;
}