从广播接收器启动服务

Starting A service from a Broadcast 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
}

我已经在清单文件中注册了服务和接收器并添加了所有 permissions.The 接收器也在工作 fine.I 我很困惑我的代码有什么问题。请帮帮我。

以后请examine LogCat to see where you are crashing.

在这种情况下,Der Golem 似乎是正确的。您不仅试图在主应用程序线程上执行数据库 I/O(糟糕!),您还试图在 Service 的初始化程序中执行此操作。 dbnull,因此您不能在 db.

上调用方法

您需要将 db.getAllContacts() 调用移动到您的服务主体中,在 db 初始化之后,并在后台线程上。