Service androidから、内部androidデータベース(sqlite)との接続を開くためのメソッドを呼び出す必要があります。私は次のコードを使用しています:
public class myService extends Service{
public void setDB(DB_DatabaseManager db){
dbManager = db;
}
public DB_DatabaseManager dbManager;
private Timer timer;
public IBinder onBind(Intent intent){
return null;
}
public void onCreate(){
super.onCreate();
Log.i("my attempt","service activated");
TimerTask task = new TimerTask(){
public void run(){
Log.i("my attempt","ANDROID SERVICE RUNNING!");
dbManager.open(); // <--this statement generates error!
// --- in this section I start the communication with database
}
};
timer = new Timer();
timer.schedule(task, 0, 20000);
}
public void onDestroy(){
super.onDestroy();
timer.cancel();
timer = null;
Log.i("my attampt", "service stopped");
}
open()は次のように定義されます。
SQLiteDatabase mDb=mDbHelper.getWritableDatabase();
私が使用するサービスを呼び出すために:
myService serv = new myService();
serv.setDB(dbManager);
startService(new Intent(this,myService.class));
行dbManager.open();を削除すると、すべて正常に機能します。ただし、私のcoodeの他の部分のメソッドdbManager.open()はうまく機能します。しかし、この状況では、logcatで次のエラーが発生します。
09-14 23:44:32.287: E/AndroidRuntime(1115): FATAL EXCEPTION: Timer-0
09-14 23:44:32.287: E/AndroidRuntime(1115): java.lang.NullPointerException
09-14 23:44:32.287: E/AndroidRuntime(1115): at host.framework.myService$1.run(myService.java:49)
09-14 23:44:32.287: E/AndroidRuntime(1115): at java.util.Timer$TimerImpl.run(Timer.java:284)