0

私は、ユーザーがお気に入りの2つの駐車場を保存できるアプリケーションを開発しました。サービスを使用して、sqliteデータベースから関連する駐車場情報を取得します。データベース内で、最初のエントリを見つけるための次のメソッドがあります。

  public Cursor firstentry(){
       String select = "SELECT PREF1, PREF2 FROM parking_table WHERE id =1";
       Cursor cursor = db.rawQuery(select, null);
   return cursor;

アプリケーションを実行するたびに、サービスが次のコマンドを使用してこのメ​​ソッドを呼び出そうとすると、強制終了エラーが表示されます。

Cursor c = dh.firstentry();

コメントすると、アプリケーションが完全に機能するため、エラーが発生します。

エラーのlogcatは次のとおりです。

04-08 18:56:38.673: E/AndroidRuntime(13166): FATAL EXCEPTION: Timer-0
04-08 18:56:38.673: E/AndroidRuntime(13166): java.lang.NullPointerException
04-08 18:56:38.673: E/AndroidRuntime(13166):    at stefan.testservice.ConnectionService$1.run(ConnectionService.java:64)
04-08 18:56:38.673: E/AndroidRuntime(13166):    at java.util.Timer$TimerImpl.run(Timer.java:284)
04-08 18:56:39.654: E/ActivityThread(13166): Activity stefan.testservice.TestserviceActivity has leaked IntentReceiver stefan.testservice.TestserviceActivity$2@40521b78 that was originally registered here. Are you missing a call to unregisterReceiver()?
04-08 18:56:39.654: E/ActivityThread(13166): android.app.IntentReceiverLeaked: Activity stefan.testservice.TestserviceActivity has leaked IntentReceiver stefan.testservice.TestserviceActivity$2@40521b78 that was originally registered here. Are you missing a call to unregisterReceiver()?
04-08 18:56:39.654: E/ActivityThread(13166):    at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:756)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:551)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:795)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.app.ContextImpl.registerReceiver(ContextImpl.java:782)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.app.ContextImpl.registerReceiver(ContextImpl.java:776)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
04-08 18:56:39.654: E/ActivityThread(13166):    at stefan.testservice.TestserviceActivity$1.onServiceConnected(TestserviceActivity.java:280)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1064)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1081)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.os.Handler.handleCallback(Handler.java:587)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.os.Looper.loop(Looper.java:123)
04-08 18:56:39.654: E/ActivityThread(13166):    at android.app.ActivityThread.main(ActivityThread.java:3683)
04-08 18:56:39.654: E/ActivityThread(13166):    at java.lang.reflect.Method.invokeNative(Native Method)
04-08 18:56:39.654: E/ActivityThread(13166):    at java.lang.reflect.Method.invoke(Method.java:507)
04-08 18:56:39.654: E/ActivityThread(13166):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-08 18:56:39.654: E/ActivityThread(13166):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-08 18:56:39.654: E/ActivityThread(13166):    at dalvik.system.NativeStart.main(Native Method)
04-08 18:56:40.054: E/ActivityThread(13166): Activity stefan.testservice.TestserviceActivity has leaked ServiceConnection stefan.testservice.TestserviceActivity$1@40521790 that was originally bound here
04-08 18:56:40.054: E/ActivityThread(13166): android.app.ServiceConnectionLeaked: Activity stefan.testservice.TestserviceActivity has leaked ServiceConnection stefan.testservice.TestserviceActivity$1@40521790 that was originally bound here
04-08 18:56:40.054: E/ActivityThread(13166):    at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:938)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:833)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.app.ContextImpl.bindService(ContextImpl.java:867)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.content.ContextWrapper.bindService(ContextWrapper.java:347)
04-08 18:56:40.054: E/ActivityThread(13166):    at stefan.testservice.TestserviceActivity.doBindService(TestserviceActivity.java:290)
04-08 18:56:40.054: E/ActivityThread(13166):    at stefan.testservice.TestserviceActivity$DownloadTask.onPostExecute(TestserviceActivity.java:193)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.os.AsyncTask.finish(AsyncTask.java:417)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.os.Looper.loop(Looper.java:123)
04-08 18:56:40.054: E/ActivityThread(13166):    at android.app.ActivityThread.main(ActivityThread.java:3683)
04-08 18:56:40.054: E/ActivityThread(13166):    at java.lang.reflect.Method.invokeNative(Native Method)
04-08 18:56:40.054: E/ActivityThread(13166):    at java.lang.reflect.Method.invoke(Method.java:507)
04-08 18:56:40.054: E/ActivityThread(13166):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-08 18:56:40.054: E/ActivityThread(13166):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-08 18:56:40.054: E/ActivityThread(13166):    at dalvik.system.NativeStart.main(Native Method)

私はすべてを試しましたが、何もうまくいかないようですので、どんな助けでも大歓迎です。前もって感謝します!

編集:

駐車テーブルコード:

  public void onCreate(SQLiteDatabase db) {
     db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, PREF1 TEXT, PREF2 TEXT)");
  }
4

4 に答える 4

0

そのnullpointerexception意味は、その時点ではおそらくデータベースには何もありません。カーソルがnullの場合に処理する必要があります

コードをステップスルーすることが、実際には何がnullであるかを正確に確認する唯一の方法です。あなたが投稿したものと区別するのは難しいですが、より多くのコードが間違いなく必要です

于 2012-04-08T17:15:17.993 に答える
0

rawsqlを実行しているので、正確なクエリがデータベースに対して有効かどうかを確認してください。SELECT PREF1, PREF2 FROM parking_table WHERE id =1

PREF1は正確に(大文字と小文字を区別して)列の名前ですか?

于 2012-04-08T17:29:02.413 に答える
0

SQLiteブラウザソフトウェアをお持ちでない場合は、こちらから入手してください: SQLiteブラウザ

SQLiteを使用しているときに役立ちます。以前にこの問題に遭遇したことがありid、クエリにパラメータを追加することで問題を解決しました。基本的に、クエリを次のように変更する必要があります。

public Cursor firstentry(){
   String select = "SELECT id, PREF1, PREF2 FROM parking_table WHERE id =1";
   Cursor cursor = db.rawQuery(select, null);
return cursor;

がカーソルの名前であるc.moveToFirst()場合は、呼び出すことを忘れないでください。c

于 2012-04-08T17:52:18.010 に答える
0

私はなんとかそれを解決しました、すべてが大丈夫でした、私はただクラスオブジェクトを初期化する必要がありました。必要なコード行は次のとおりです。

this.yourobject = new class(this);

私の場合は次のとおりです。

this.dh = new SQLHelper(this);

それが役に立てば幸い :)

于 2012-04-11T10:49:32.060 に答える