0

私はAndroidにサービスがあり、そのサービスからアクティビティを開始しました。サービスからアクティビティ内のメソッドを呼び出しました。そのメソッドで、データベースを開いて値を挿入しようとしました。データベースを使用せずに、正常に動作しています。しかし、私のアプリはデータベースを使用すると強制的に閉じられます

プラグイン(Javaファイル)->サービス->アクティビティ(ここではデータベースにデータを挿入しようとします)

service.java

public class MyService extends Service 
{
    @Override
    public IBinder onBind(Intent intent) 
    {
        return null;
    }

    @Override
    public void onCreate() 
    {
        Log.d(TAG, "onCreate");
    }

    @Override
    public void onDestroy() 
    {
        Log.d(TAG, "onDestroy");
    }

    public void onStart(Intent intent, int startid) 
    {
        Timer mTimer = new Timer(user);
        mTimer.scheduleAtFixedRate(new mainTask(), 5000,60000);//1 hour=3600 s

    }

    private class mainTask extends TimerTask 
    { 
        public void run() 
        {
            toastHandler.sendEmptyMessage(0);
        }
    }  


    private final Handler toastHandler = new Handler() 
    {
        public void handleMessage(Message msg) 
        {
             StorageHelper s=new StorageHelper();
             String a= s.UpdateValues(userid);
        }
    };    
}

Activity.java

public class StorageHelper extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState); 
    }

    public  String UpdateValues(int userid)
    {
        try {
            DBAdapter1 database=new DBAdapter1(this);
            database.open();
            long id=database.insert(71,4,"yes");
            database.close();
        } catch (SQLException e) {

        }
        return "success";
    }
}

oncreateでデータベースを開くと、その動作に注意してください。ただし、updatavalues()データベース内では、挿入するために開くことができません

try {
    DBAdapter1 database=new DBAdapter1(this);
    database.open();
    long id=database.insert(71,4,"yes");
    database.close();
} catch (SQLException e) {

}

2種類の力を近づけました

エラー番号1

07-09 15:16:27.859: E/AndroidRuntime(1211): FATAL EXCEPTION: main
07-09 15:16:27.859: E/AndroidRuntime(1211): java.lang.NullPointerException
07-09 15:16:27.859: E/AndroidRuntime(1211):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at com.app.mobilyzer.DBAdapter1.open(DBAdapter1.java:68)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at com.app.mobilyzer.StorageHelper.UpdateValues(StorageHelper.java:33)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at com.app.mobilyzer.MyService$1.handleMessage(MyService.java:121)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at android.os.Looper.loop(Looper.java:123)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at android.app.ActivityThread.main(ActivityThread.java:4627)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at java.lang.reflect.Method.invokeNative(Native Method)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at java.lang.reflect.Method.invoke(Method.java:521)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at dalvik.system.NativeStart.main(Native Method)

エラー番号2

07-09 15:16:36.889: E/AndroidRuntime(1237): FATAL EXCEPTION: main
07-09 15:16:36.889: E/AndroidRuntime(1237): java.lang.RuntimeException: Unable to start service com.app.mobilyzer.MyService@44fc6280 with null: java.lang.NullPointerException
07-09 15:16:36.889: E/AndroidRuntime(1237):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at android.app.ActivityThread.access$3600(ActivityThread.java:125)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at android.os.Looper.loop(Looper.java:123)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at android.app.ActivityThread.main(ActivityThread.java:4627)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at java.lang.reflect.Method.invokeNative(Native Method)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at java.lang.reflect.Method.invoke(Method.java:521)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at dalvik.system.NativeStart.main(Native Method)
07-09 15:16:36.889: E/AndroidRuntime(1237): Caused by: java.lang.NullPointerException
07-09 15:16:36.889: E/AndroidRuntime(1237):     at com.app.mobilyzer.MyService.onStart(MyService.java:81)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at android.app.Service.onStartCommand(Service.java:420)
07-09 15:16:36.889: E/AndroidRuntime(1237):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
07-09 15:16:36.889: E/AndroidRuntime(1237):     ... 10 more
4

1 に答える 1

0

どちらの例外もNullPointerExceptionタイプであり、database.open()メソッドの最初の例外です。DBAdapter1.java:68。DBAdapter1クラスの68行目で何をしているかを確認してください。値がnull/空になる可能性があると思われる場合は、常にnullチェックを行ってください

07-09 15:16:27.859: E/AndroidRuntime(1211): java.lang.NullPointerException
07-09 15:16:27.859: E/AndroidRuntime(1211):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
07-09 15:16:27.859: E/AndroidRuntime(1211):     at com.app.mobilyzer.DBAdapter1.open(DBAdapter1.java:68)

2番目の例外は、MyService.javaサービスの行番号81です。onstartメソッドです。

07-09 15:16:36.889: E/AndroidRuntime(1237): Caused by: java.lang.NullPointerException
07-09 15:16:36.889: E/AndroidRuntime(1237):     at com.app.mobilyzer.MyService.onStart(MyService.java:81)
于 2012-07-09T10:16:10.660 に答える