Android 执行doInBackground时出错
我最近在AsyncTask中包装了一个主线程方法。它似乎认为我的代码中仍有一些东西试图访问UI线程。但我不确定它是什么-这是我的任务:Android 执行doInBackground时出错,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,我最近在AsyncTask中包装了一个主线程方法。它似乎认为我的代码中仍有一些东西试图访问UI线程。但我不确定它是什么-这是我的任务: private class showNextRandomQuestion extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... params)
private class showNextRandomQuestion extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
SQLDatabaseHelper db = new SQLDatabaseHelper(MainActivity.this);
//get the data from the database
List<List<String>> listList = db.getAllAnswersByQuestion1();
//Get the question/text/answer Strings
List<String> questionStrings = listList.get(0); //question Strings
List<String> answerSetIds = listList.get(1);
//Generate random index
Random r = new Random();
int rand = Math.abs((r.nextInt() % questionStrings.size()));
//get answer description for randomly selected question
String questionString = questionStrings.get(rand);
String answerSetId = answerSetIds.get(rand);
String regex = "\\[|\\]";
answerId = answerSetId.replaceAll(regex, "");
mQuestionString = questionString.replaceAll(regex, "");
return mQuestionString;
}
@Override
protected void onPostExecute(String result) {
questionView.setText(mQuestionString);
}
}
有人能指出他们认为仍然在访问UI线程的东西是什么吗。非常感谢。我认为这是由于索引超出了界限,所以您正在访问不存在的内容。请在第395行查看有什么内容。我认为您的SqlHelper类出现异常。原因:android.database.CursorIndexOutOfBoundsException。检查你的光标是否为空?啊,是的,谢谢。我一直在尝试处理游标窗口是完全错误,你也是对的。我不确定是它导致了这个连锁反应,但现在你提到了。你觉得你能帮我解决这个问题吗?请随意看一看,因为我没走多远-请求索引-1,大小为383776,很臭,好像你没有调用游标。MoveToFirst这是我代码中的行-'List listList=db.getAllAnswersByQuestion1;'很明显,这就是它从数据库返回的内容。我会看看我能为我的另一个问题做些什么。谢谢!
05-25 08:55:35.787: W/CursorWindow(20418): Window is full: requested allocation 132 bytes, free space 104 bytes, window size 2097152 bytes
05-25 08:55:39.437: W/dalvikvm(20418): threadid=12: thread exiting with uncaught exception (group=0x415aad88)
05-25 08:55:39.537: E/AndroidRuntime(20418): FATAL EXCEPTION: AsyncTask #2
05-25 08:55:39.537: E/AndroidRuntime(20418): Process: com.example.quizapp, PID: 20418
05-25 08:55:39.537: E/AndroidRuntime(20418): java.lang.RuntimeException: An error occured while executing doInBackground()
05-25 08:55:39.537: E/AndroidRuntime(20418): at android.os.AsyncTask$3.done(AsyncTask.java:300)
05-25 08:55:39.537: E/AndroidRuntime(20418): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
05-25 08:55:39.537: E/AndroidRuntime(20418): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
05-25 08:55:39.537: E/AndroidRuntime(20418): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
05-25 08:55:39.537: E/AndroidRuntime(20418): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
05-25 08:55:39.537: E/AndroidRuntime(20418): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-25 08:55:39.537: E/AndroidRuntime(20418): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-25 08:55:39.537: E/AndroidRuntime(20418): at java.lang.Thread.run(Thread.java:841)
05-25 08:55:39.537: E/AndroidRuntime(20418): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 383776
05-25 08:55:39.537: E/AndroidRuntime(20418): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
05-25 08:55:39.537: E/AndroidRuntime(20418): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
05-25 08:55:39.537: E/AndroidRuntime(20418): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
05-25 08:55:39.537: E/AndroidRuntime(20418): at com.example.quizapp.SQLDatabaseHelper.getAllAnswersByQuestion1(SQLDatabaseHelper.java:393)
05-25 08:55:39.537: E/AndroidRuntime(20418): at com.example.quizapp.MainActivity$showNextRandomQuestion.doInBackground(MainActivity.java:395)
05-25 08:55:39.537: E/AndroidRuntime(20418): at com.example.quizapp.MainActivity$showNextRandomQuestion.doInBackground(MainActivity.java:1)
05-25 08:55:39.537: E/AndroidRuntime(20418): at android.os.AsyncTask$2.call(AsyncTask.java:288)
05-25 08:55:39.537: E/AndroidRuntime(20418): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-25 08:55:39.537: E/AndroidRuntime(20418): ... 4 more