-1

私には2つのクラスがMainActivityありDoHardWorkます。DoHardWorkは拡張され、クラスでは、を取得してクエリを実行AsyncTaskするためにコンテキストにアクセスする必要があります。contentResolver

問題ありませんよね?DoHardWorkそれをパラメータとして:に渡してみましょう。

    Context currCont = this;
    new DoHardWork(currCont).execute();

次に、コンストラクターでコンテキストを取得し、それを。というグローバル変数に格納しますccc

しかし、コンテキストにアクセスしようとするとすぐにクラッシュし、意味のあるエラーは発生しません。

try {
    Cursor cursor = ccc.getContentResolver().query(
            Uri.parse("content://sms/inbox"), null, null, null, null);
}
catch (Exception e) {
    Log.e("apptag", e.getMessage());
    e.printStackTrace();
}

私が得るのは:

05-18 18:54:06.725: E/apptag(29063): Crashed
05-18 18:54:06.725: E/apptag(29063): java.lang.NullPointerException
05-18 18:54:06.725: E/apptag(29063):    at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:91)
05-18 18:54:06.725: E/apptag(29063):    at se.jbhalmstad.ndroid.DoHardWork.getTextMessages(DoHardWork.java:214)
05-18 18:54:06.725: E/apptag(29063):    at se.jbhalmstad.ndroid.DoHardWork.returnResults(DoHardWork.java:114)
05-18 18:54:06.725: E/apptag(29063):    at se.jbhalmstad.ndroid.DoHardWork.doInBackground(DoHardWork.java:55)
05-18 18:54:06.725: E/apptag(29063):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
05-18 18:54:06.725: E/apptag(29063):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-18 18:54:06.725: E/apptag(29063):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-18 18:54:06.725: E/apptag(29063):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-18 18:54:06.725: E/apptag(29063):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-18 18:54:06.725: E/apptag(29063):    at java.lang.Thread.run(Thread.java:856)

コンテキストにアクセスできないのはなぜですか?

4

1 に答える 1

1

問題が見つかりました。

それが機能する方法は、MainActivityクラスから、繰り返しのAlarmManagerを設定することです。アラームが鳴ると、GetOperationsクラスはBroadcastReceiverとして機能し、実行されます。AsyncTaskクラスで重い作業が必要なため、DoHardWorkというクラスですべてを行います。(はい、名前が悪いことはわかっています。とにかくコーディングのほとんどを改善する必要があります)しかし、BroadcastReceiverからDoHardWorkを呼び出すことはできず、MainActivityから呼び出す必要があります。したがって、BroadcastReceiverから呼び出そうとする代わりに、MainActivityの新しいインスタンスを作成し、そこでメソッドを呼び出して、DoHardWorkを呼び出します。それが私が問題を起こしたところです。MainActivityは静的ではないため、新しいインスタンスを作成したときにコンテキストがありませんでした。

私がやったことは、BroadcastReceiverからMainActivityにコンテキストを渡すことです。

説明中にこれはおそらく非常に厄介になりましたが、その要点を理解していただければ幸いです。助けてくれてありがとう!

于 2012-05-19T00:18:53.753 に答える