Проверка подключения к Интернету. Почему Exception игонорируется?

Рейтинг: 0Ответов: 1Опубликовано: 30.09.2014

Подскажите, пожалуйста, кто знает. Отправляю емаил без инета, все равно пишет, что сообщение ушло. Вот код:

private class sender_mail_async extends AsyncTask<Object, String, Boolean> {
    ProgressDialog WaitingDialog;

    @Override
    protected void onPreExecute() {
        WaitingDialog = ProgressDialog.show(SmsActivity.this, getString(R.string.data_send), getString(R.string.msg_send), true);
    }

    @Override
    protected void onPostExecute(Boolean result) {
        WaitingDialog.dismiss();
        Toast.makeText(mainContext, getString(R.string.msg_sended), Toast.LENGTH_LONG).show();
        ((Activity) mainContext).finish();
    }

    @Override
    protected Boolean doInBackground(Object... params) {
        try {
            title = ((EditText) findViewById(R.id.screen_sendnews_et_title)).getText().toString();
            text = ((EditText) findViewById(R.id.screen_sendnews_et_text)).getText().toString();

            from = "*********";
            where = "********";

            MailSenderClass sender = new MailSenderClass("****", "*****");

            sender.sendMail(title, text, from, where);

        } catch (Exception e) {
            Toast.makeText(mainContext, (R.string.error_send_msg), Toast.LENGTH_SHORT).show();
        }
        return false;
    }
}

Ответы

▲ 1

Попытка вызова Toast внутри doInBackground() бессмысленна - в лучшем случае ничего не выйдет, а в худшем получите крэш. doInBackground не имеет доступа в юай тред.

По правилам надо корректно завершить doInBackground с некоторым кодом ошибки, а в onPostExecute обработать ошибку и выдать на-гора то, что вы там себе запланировали.

А вообще совсем по кошерному надо проверить наличие коннекта в onPreExecute(), и только если все успешно запускать doInBackground().

И да, использование Toast в качестве отладочного лога - это не айс :) На то есть Logcat.