スプラッシュ画面がユーザーに表示されている間にデータベースに入力したいテキストファイルにいくつかのデータがあります。AsyncTask で試してみましたが、このエラー が発生しますCan't create handler inside thread that has not called Looper.prepare() AsyncTask スレッドで UI を更新しようとすると、このエラーがスローされることを理解しています。しかし、私はそのようなことはしていません。助けてください。私はアンドロイドが初めてです。ここに私のコードがあります: AsyncTask:
`public class LoadingTask extends AsyncTask<String, Integer, Integer>'
doInBackground メソッド
protected Integer doInBackground(String... params) {
// TODO Auto-generated method stub
MainActivity main = new MainActivity();
return 1234;
}
MainActivity コンストラクターから、データベースにデータを入力する DbHelper クラスを呼び出します。
`public MainActivity(){
Words word = new Words(getApplicationContext());
try {
word.open();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}`
私の DbHelper onCreate はこれを行います。
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
mDatabase = db;
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_WORD + " TEXT NOT NULL, " +
KEY_MEANING + " TEXT NOT NULL);"
);
try {
loadWords();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
loadWords 関数は次のとおりです。
private void loadWords() throws IOException {
Log.d(TAG, "Loading words...");
final Resources resources = mHelperContext.getResources();
InputStream inputStream = resources.openRawResource(R.raw.definitions);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
Words uff = new Words(ApplicationContextProvider.getContext());
// uff.close();
// String line
String line;
try {
//if(!uff.ourDatabase.isOpen())
uff.open();
// ourHelper.getWritableDatabase();
while ((line = reader.readLine()) != null) {
String[] strings = TextUtils.split(line, "-");
if (strings.length < 2) continue;
Log.d(TAG, "going to insert");
long id = createEntry(strings[0].trim(), strings[1].trim());
Log.d(TAG, "After insert " + id);
if (id < 0) {
Log.e(TAG, "unable to add word: " + strings[0].trim());
}
}
Log.d(TAG, "after whille loop");
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d(TAG, "open fail");
} finally {
uff.close();
reader.close();
}
Log.d(TAG, "DONE loading words.");
}
これは私のログキャットが言うことです:
07-06 18:41:20.604: W/dalvikvm(2364): threadid=11: thread exiting with uncaught exception (group=0x41fac2a0)
07-06 18:41:20.624: E/AndroidRuntime(2364): FATAL EXCEPTION: AsyncTask #1
07-06 18:41:20.624: E/AndroidRuntime(2364): java.lang.RuntimeException: An error occured while executing doInBackground()
07-06 18:41:20.624: E/AndroidRuntime(2364): at android.os.AsyncTask$3.done(AsyncTask.java:299)
07-06 18:41:20.624: E/AndroidRuntime(2364): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-06 18:41:20.624: E/AndroidRuntime(2364): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-06 18:41:20.624: E/AndroidRuntime(2364): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-06 18:41:20.624: E/AndroidRuntime(2364): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-06 18:41:20.624: E/AndroidRuntime(2364): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-06 18:41:20.624: E/AndroidRuntime(2364): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-06 18:41:20.624: E/AndroidRuntime(2364): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-06 18:41:20.624: E/AndroidRuntime(2364): at java.lang.Thread.run(Thread.java:856)
07-06 18:41:20.624: E/AndroidRuntime(2364): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
07-06 18:41:20.624: E/AndroidRuntime(2364): at android.os.Handler.<init>(Handler.java:121)
07-06 18:41:20.624: E/AndroidRuntime(2364): at android.app.Activity.<init>(Activity.java:772)
07-06 18:41:20.624: E/AndroidRuntime(2364): at com.sourabh.words.MainActivity.<init>(MainActivity.java:32)
07-06 18:41:20.624: E/AndroidRuntime(2364): at com.sourabh.words.LoadingTask.doInBackground(LoadingTask.java:69)
07-06 18:41:20.624: E/AndroidRuntime(2364): at com.sourabh.words.LoadingTask.doInBackground(LoadingTask.java:1)
07-06 18:41:20.624: E/AndroidRuntime(2364): at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-06 18:41:20.624: E/AndroidRuntime(2364): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-06 18:41:20.624: E/AndroidRuntime(2364): ... 5 more
07-06 18:41:21.009: D/libEGL(2364): loaded /system/lib/egl/libEGL_mali.so