我试图从广播接收器启动一项服务,该服务将一些数据更新为电子表格。但我得到一个错误,说无法实现服务: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,并添加了所有权限。接收器也正常工作。我很困惑我的代码有什么问题。请帮帮我。
答案 0 :(得分:2)
将来请examine LogCat to see where you are crashing。
在这种情况下,Der Golem似乎是正确的。您不仅尝试在主应用程序线程上执行数据库I / O(错误!),而是尝试在Service
的初始化程序中执行此操作。 db
为null
,因此您无法在db
上调用方法。
在db.getAllContacts()
初始化后,您需要将db
电话转移到服务正文中,并在后台线程中。