从广播接收器启动服务

时间:2015-04-28 17:35:16

标签: android service broadcastreceiver

我试图从广播接收器启动一项服务,该服务将一些数据更新为电子表格。但我得到一个错误,说无法实现服务:NULL指针异常。 我的Receiver代码是:

    import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;

/**
 * Created by Pallav on 4/27/2015.
 */
public class InternetReciever extends BroadcastReceiver {

    @Override
    public void onReceive( Context context, Intent intent) {

        if (isOnline(context)) {
            Toast.makeText(context, "Network Available Do operations", Toast.LENGTH_LONG).show();
            Intent updateIntent = new Intent(context, UpdateToSpreadsheet.class);
            context.startService(updateIntent);
        }

    }


    public boolean isOnline(Context context) {

        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        //should check null because in air plan mode it will be null
        return (netInfo != null && netInfo.isConnected());

    }
}

我的服务代码是:

public class UpdateToSpreadsheet extends Service {
D

BAdapter db;
    Cursor c = db.getAllContacts();


    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //some code
}

我已在Manifest文件中注册了Service和Receiver,并添加了所有权限。接收器也正常工作。我很困惑我的代码有什么问题。请帮帮我。

1 个答案:

答案 0 :(得分:2)

将来请examine LogCat to see where you are crashing

在这种情况下,Der Golem似乎是正确的。您不仅尝试在主应用程序线程上执行数据库I / O(错误!),而是尝试在Service的初始化程序中执行此操作。 dbnull,因此您无法在db上调用方法。

db.getAllContacts()初始化后,您需要将db电话转移到服务正文中,并在后台线程中。