我正在开发一个Android应用程序,实际上我是android的新手。
在我的应用程序中,我使用SQLITE数据库进行数据存储。
但我想调用一些.net Web服务来获取新数据,然后想要用新数据更新SQLITE数据库。
我想在后台使用Android服务每24小时完成一项任务。
基本上我需要两个服务,一个用于获取数据,另一个用于更新数据。
所以我的问题是我应该如何创建这些服务,我应该把代码放在哪里开始服务和停止服务。
我需要在后台完成这项任务,我还需要在开始服务之前检查互联网连接。
伙计们请帮助我,如果可能的话也提供代码。
答案 0 :(得分: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();
像这样你必须为你的另一个服务创建另一个Thread,如果你试图在Thread中更改UI,你会遇到Window Leak错误的问题
OR
还有一种方法可以在类中调用WebServices,在您调用该Web服务的doBackground方法中扩展asynctask
还检查网络连接的代码
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;
}
}
你需要检查的地方是数据连接还是不写这个
if(!AppStatus.getInstance(this).isOnline(this)){
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!!!!");
}