从广播接收器启动服务
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
的初始化程序中执行此操作。 db
是 null
,因此您不能在 db
.
上调用方法
您需要将 db.getAllContacts()
调用移动到您的服务主体中,在 db
初始化之后,并在后台线程上。
我正在尝试启动一项服务,该服务将一些数据从广播接收器更新到电子表格。但是我收到一个错误,指出无法实例化服务:空指针异常。 我的接收者代码是:
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
的初始化程序中执行此操作。 db
是 null
,因此您不能在 db
.
您需要将 db.getAllContacts()
调用移动到您的服务主体中,在 db
初始化之后,并在后台线程上。