나는 두 클래스, 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 문에 전달할 수 있습니다. Log.e를 시도해보십시오 ("apptag", "Crashed!", e); 좀 더 유용한 출력물을 얻는 지보십시오. –
로그에 인쇄했습니다. Log.e()에 매개 변수로 전달하면 동일한 예외가 발생합니다. 도움이된다면 전체 예외가있는 첫 번째 게시물을 업데이트했습니다. – qwerty
인수로 전달 된'Context'를 저장하는 대신,'getApplicationContext()'를 호출 해보십시오. –