У меня есть два класса, MainActivity
и DoHardWork
. DoHardWork расширяет AsyncTask
, и в классе мне нужно получить доступ к контексту, чтобы получить contentResolver
и выполнить запрос.Не удается получить доступ к getContentResolver() из контекста?
Без проблем, не так ли? Давайте просто передать его в качестве параметра 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)
Почему я не могу получить доступ к контексту?
Я не думаю, что e.printStackTrace печатает в журнале. Однако малоизвестный факт, вы можете передать исключение в качестве параметра в оператор журнала. Попробуйте Log.e («apptag», «Crashed!», E); и посмотрите, получите ли вы более полезный вывод. –
Он напечатал журнал. Я получаю такое же исключение, если передать его в качестве параметра в Log.e(). Я обновляю первый пост со всем исключением, если это помогает. – qwerty
Вместо сохранения 'Context', переданного как аргумент, попробуйте вызвать' getApplicationContext() 'на нем. –