【发布时间】:2012-05-18 16:36:52
【问题描述】:
我有两个班级,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)
为什么我无法访问上下文?
【问题讨论】:
-
我认为 e.printStackTrace 不会打印到日志中。然而,鲜为人知的事实是,您可以将异常作为参数传递给日志语句。试试 Log.e("apptag", "Crashed!", e);看看你是否得到了一些更有用的输出。
-
它确实打印到了日志中。如果我将它作为参数传递给 Log.e(),我会得到相同的异常。如果有帮助,我会用整个例外情况更新第一篇文章。
-
不要存储作为参数传递的
Context,而是尝试在其上调用getApplicationContext()。 -
您发布的代码是“returnResults”方法还是“getTextMessages”方法?
-
@K-ballo,一旦我尝试在 ccc 上调用 getApplicationContext,它就会崩溃。
标签: java android parameters crash android-context