Каков наилучший способ остановить активность и предупредить пользователя? - PullRequest
0 голосов
/ 02 сентября 2010

У меня есть приложение, которое должно создать базу данных, и если это не удается, то нет смысла двигаться вперед. Я создал AlertDialog и show(), но он никогда не отображается. Логика проваливается, а затем и barfs из-за отсутствия базы данных.

Какой правильный / лучший способ выбросить сообщение и остановить активность? Код ниже выполняется нормально (то есть show() происходит во время отладки и переходит к следующей строке), но пользовательский интерфейс никогда не отображает это предупреждение. Кстати, я понимаю, что бросок может быть не самым изящным, но я даже не захожу так далеко ... Б ^).

try {

    myDBHelp.createDataBase();
} catch (IOException ioe) {
    new AlertDialog.Builder(this).setCancelable(false)
        .setMessage(ioe.getMessage())
        .setTitle("Database Create Failed")
        .setPositiveButton("Quit", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                throw new Error("Unable to create database - please try uninstall/reinstall");
            }
         })
         .show();

Ответы [ 3 ]

0 голосов
/ 02 сентября 2010

Обычно я делаю что-то вроде этого:

void myFunction() {

    try {
        somecode..
    } catch (IOException e){
        e.printStackTrace();
        doToast("Unknown Error");  //Display Toast to user
        return;           //Leave myFunction
    }

    somecode...  //If no error continue here

    return;
}

protected void doToast(final String str) {
    this.runOnUiThread(new Runnable() {
        public void run() {
            Toast.makeText(myClass.this, str, Toast.LENGTH_SHORT).show();
        }
    });

}
0 голосов
/ 02 февраля 2017

createDataBase() выдает ошибку или обрабатывает ее сам? Если оно обрабатывает само исключение, то оно никогда не достигает вашего внешнего блока, и поэтому вы никогда не проходите через блок catch. Убедитесь, что в конце подписи метода добавлено throws IOException, например:

public void createDataBase() throws IOException {[...]}

Также убедитесь, что у вас нет блоков try / catch, перехватывающих IOException внутри из createDataBase().

Таким образом, всякий раз, когда происходит IOException, он делегируется вашему внешнему блоку перехвата, и появляется ваш диалог.

0 голосов
/ 02 сентября 2010

Я не знаю, какой поток вы используете. Но у вас есть предложение U сделать это следующим образом.

U может начать работу с базой данных следующим образом.

Intent i = new Intent (это, Databaseoperation.class);startactivity (я);............................... это сделает элементы управления для перехода в класс Databaseoperation, которое выполняет различные операции, такие как open.close, insertdelete .. и т.д.1009 *

Вы можете сделать это так ..

спасибо, Ракеш

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