Как показать пользовательское сообщение об ошибке в тосте из обработчика? - PullRequest
0 голосов
/ 29 января 2012

Я создал собственный обработчик, который будет заботиться о закрытии диалогов, показе диалогов и отображении (пользовательских) сообщений об ошибках.Тем не менее, я застрял с пользовательской частью сообщения об ошибке.Как мне опубликовать сообщение с пользовательским сообщением и как разобрать его в handleMessage?

Сейчас я делаю:

handler.sendMessage(Message.obtain(handler, HANDLER_MESSAGE_ERROR));

Я читал орасслоение, но не получилось.Желательно (чтобы код был чистым), я хотел бы сделать что-то вроде этого:

handler.sendMessage(Message.obtain(handler, HANDLER_MESSAGE_ERROR, "Custom error message"));

и для диалогового окна с ошибкой:

handler.sendMessage(Message.obtain(handler, HANDLER_MESSAGE_DIALOG, "Custom title", "Custom error message"));

Вот код обработчика, который я сейчас использую:

public class MyHandler extends Handler {
    private Activity mContext;

    public MyHandler(Activity activity) {
        mContext = activity;
    }

    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case MyActivity.HANDLER_MESSAGE_ERROR:
            try {
                Toast.makeText(mContext, "_This should be a custom error message", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {

            }
            break;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 29 января 2012

Я использовал обработчик для передачи различных сообщений.Этот код будет работать для вас.

Передайте только простое сообщение:

Message msg = new Message();
msg.what = HANDLER_MESSAGE_ERROR;
Bundle b = new Bundle();
b.putString("message", "Custom error message");
msg.setData(b);
handler.sendMessage(msg);

Передайте заголовок и сообщение:

Message msg = new Message();
msg.what = HANDLER_MESSAGE_DIALOG;
Bundle b = new Bundle();
b.putString("title", "Custom title");
b.putString("message", "Custom error message");
msg.setData(b);
handler.sendMessage(msg);

Вы получите пакет в своем методе вследующим образом

@Override
public void handleMessage(Message msg) {
    //Get bundle
    Bundle b = msg.getData();
    String title,messag;
    switch (msg.what) {
    case MyActivity.HANDLER_MESSAGE_ERROR:
        try {
             message = b.getString("message");
             //show toast here
        } catch (Exception e) {

        }
        break;
    case MyActivity.HANDLER_MESSAGE_DIALOG:
        try {
             title = b.getString("title");
             message = b.getString("message");
             //show toast here
        } catch (Exception e) {

        }
        break;
    }
}
0 голосов
/ 29 января 2012

Объект Message может хранить пары ключ-значение, например:

final Message msg = new Message();
final Bundle data = new Bundle();
data.putString(ERROR, "error message");
msg.setData(data);

В обработчике извлекать данные из пакета:

final String e = m.getData().getString(ERROR);
...