Android: не удается создать обработчик, который не вызвал Looper.prepare () для действий AsynTask и Database - PullRequest
0 голосов
/ 17 июля 2011

Позвольте мне начать с того, что я вижу, что эта проблема и все возможные решения, но я не могу понять, как она здесь применяется, поэтому я не знаю, с чего начать.

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;

}

1 Ответ

0 голосов
/ 17 июля 2011

Ваш Category конструктор пытается создать экземпляр Activity или, возможно, Category extends Activity.Не делай этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...