Как сохранить активность на Force Close? - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть этот кусок кода, который действительно подвержен ошибкам, поэтому я обернул его оператором try {} catch. Я не хочу возвращаться к предыдущему действию, я просто хочу, чтобы оно оставалось в текущем действии, чтобы пользователь мог редактировать все, что с ним не так.

Как мне это реализовать?

    try{
        orgi.insertOrThrow(tableName, null, values);
        Toast.makeText(this, "You have successfully created a new profile!", 2).show();
        gotoProfileList();
        Log.e(getClass().getSimpleName(),"Successfully added to database");
    }catch(SQLiteException se){
        Log.e(getClass().getSimpleName(), "Database connection failed!" + se);

        //Stay in this activity...
    }finally{
        if (orgi != null){
            orgi.close();
        }
    }

Забудьте, я смог решить свою проблему, обнаружив alertDialog, который сообщает пользователю об ошибке. В любом случае спасибо. :)

            try{
                orgi.insertOrThrow(tableName, null, values);
                Toast.makeText(this, "You have successfully created a new profile!", 2).show();
                gotoProfileList();
                Log.e(getClass().getSimpleName(),"Successfully added to database");
            }catch(SQLiteException se){
                Log.e(getClass().getSimpleName(), "Database connection failed!" + se);
                displayError();
                //stayInThisActivity();
            }finally{
                if (orgi != null){

                }   

public void displayError(){
            AlertDialog.Builder error = new AlertDialog.Builder(this);
            error.setMessage("That profile name already exists, try another one.").setCancelable(false).setPositiveButton("Yes",new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();

                }
            });

            AlertDialog alert = error.create();
            alert.setTitle("Error");
            alert.show();
        }

1 Ответ

2 голосов
/ 06 февраля 2011

Принудительное закрытие вызвано необусловленными исключениями.Вы только ловите исключение SQLiteException в своем примере.Вам нужно ловить другие исключения и обрабатывать их изящно.Теперь классической причиной FC являются использование нулевых объектов и возникающих исключений NullPointerException.Вы не должны ловить это.Ваша заявка будет слишком испорчена, чтобы продолжить работу правильно во многих случаях.Вы можете прочитать больше здесь: Catch_NullPointerException

В любом случае вам следует запустить приложение в эмуляторе или на подключенном телефоне, вызвать сбой, а затем войти в журнал устройства с помощью DDMS или"adb logcat".Посмотрите обратную трассировку, найдите ошибку, исправьте ее.Если ваше приложение находится на рынке, на рынке будут перечислены обратные следы, отправленные вашими пользовательскими устройствами для вас.Если вы еще не (хотя?) Пользуетесь Android Market, ваше приложение может удаленно регистрировать трассировки стека с помощью PHP-скрипта, запущенного на веб-сервере с android-remote-stacktrace

Кстати, этоЛучше передать исключение как третий параметр в методы журнала, а не объединять второй параметр с исключением (тем самым неявно вызывая toString ()).В вашем примере это будет:

Log.e(getClass().getSimpleName(), "Database connection failed!", se);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...