Позвольте мне начать с того, что я вижу, что эта проблема и все возможные решения, но я не могу понять, как она здесь применяется, поэтому я не знаю, с чего начать.
My MainActiviy проверяет, запускает ли пользователь приложение в первый раз, и заполняет базу данных. OnCreate в SQL Helper создает только таблицы.
Если это первый раз, когда я запускаю его, я вызываю AsyncTask, который проверяет язык, а затем заполняю базу данных правильными данными. Все работает, за исключением того, что я получаю это исключение при попытке вставить что-то в базу данных. Я не вижу, где находится обработчик, который связывается с кодом.
Любые подсказки были бы великолепны!
Стек такой:
07-16 19:49:06.854: ERROR/DatabaseCreatorTask(10725): Error trying to insert categories:Can't create handler inside thread that has not called Looper.prepare()
07-16 19:49:06.854: WARN/System.err(10725): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
07-16 19:49:06.854: WARN/System.err(10725): at android.os.Handler.<init>(Handler.java:121)
07-16 19:49:06.854: WARN/System.err(10725): at android.app.Activity.<init>(Activity.java:679)
07-16 19:49:06.854: WARN/System.err(10725): at com.objects.Category.<init>(Category.java:19)
07-16 19:49:06.854: WARN/System.err(10725): at tasks.DatabaseCreatorTask.fillCategoriesTable(DatabaseCreatorTask.java:58)
07-16 19:49:06.854: WARN/System.err(10725): at tasks.DatabaseCreatorTask.doInBackground(DatabaseCreatorTask.java:89)
07-16 19:49:06.854: WARN/System.err(10725): at tasks.DatabaseCreatorTask.doInBackground(DatabaseCreatorTask.java:1)
07-16 19:49:06.854: WARN/System.err(10725): at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-16 19:49:06.854: WARN/System.err(10725): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-16 19:49:06.854: WARN/System.err(10725): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-16 19:49:06.854: WARN/System.err(10725): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
07-16 19:49:06.854: WARN/System.err(10725): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
07-16 19:49:06.854: WARN/System.err(10725): at java.lang.Thread.run(Thread.java:1096)
Это часть моего исходного кода:
doInBackground of AsyncTask:
protected Boolean doInBackground(Void ... strings) {
Log.i(LOG_TAG, "doInBackground...");
String lang = PreferencesHelper.getInstance().getSettings(context).getString("lang", "en");
boolean resultCategories = fillCategoriesTable(lang);
return (resultCategories);
}
А это если метод, который выдает исключение:
private boolean fillCategoriesTable(String lang) {
boolean result = true;
Log.i(LOG_TAG, "Filling categories...");
if (lang != null && lang.length() > 0) {
Log.i(LOG_TAG, "Context: " + context);
Log.i(LOG_TAG, "Language: " + lang);
if (lang.equalsIgnoreCase("es")) {
try {
Category cat1 = new Category("Entretenimiento", null);
Log.i(LOG_TAG, "Creating new category Entretenimiento:" + cat1.create(this.context));
Category cat2 = new Category("Viajes", null);
Log.i(LOG_TAG, "Creating new category Viajes:" + cat2.create(this.context));
Category cat3 = new Category("Comidas", null);
Log.i(LOG_TAG, "Creating new category Comidas:" + cat3.create(this.context));
} catch (Exception e) {
Log.e(LOG_TAG, "Error trying to insert categories: " + e.getMessage());
e.printStackTrace();
result = false;
}
} else {
try {
Category cat1 = new Category("Entertainment", null);
Log.i(LOG_TAG, "Creating new category Entertainment:" + cat1.create(this.context));
Category cat2 = new Category("Travel", null);
Log.i(LOG_TAG, "Creating new category Travel:" + cat2.create(this.context));
Category cat3 = new Category("Dining", null);
Log.i(LOG_TAG, "Creating new category Dining:" + cat3.create(this.context));
} catch (Exception e) {
result = false;
Log.e(LOG_TAG, "Error trying to insert categories:" + e.getMessage());
e.printStackTrace();
}
}
} else {
Log.w(LOG_TAG, "Lang is null");
result = false;
}
return result;
}