如何使用Android服务在后台定期调用Web服务?

时间:2012-01-27 10:17:11

标签: android

我正在开发一个Android应用程序,实际上我是android的新手。

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

但我想调用一些.net Web服务来获取新数据,然后想要用新数据更新SQLITE数据库。

我想在后台使用Android服务每24小时完成一项任务。

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

所以我的问题是我应该如何创建这些服务,我应该把代码放在哪里开始服务和停止服务。

我需要在后台完成这项任务,我还需要在开始服务之前检查互联网连接。

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

1 个答案:

答案 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!!!!");
    }