2012-05-01 2 views
1

Я написал код для создания httpGet, а затем вернул JSON в основной поток. Иногда, хотя сервер не работает, и я хочу сообщить основному потоку, что сервер отключен, но не знаю, как это сделать с помощью обработчика.Отправка ошибки обработчику в Android

Мой код выглядит следующим образом:

public class httpGet implements Runnable { 

    private final Handler replyTo; 
    private final String url; 

    public httpGet(Handler replyTo, String url, String path, String params) { 
     this.replyTo = replyTo; 
     this.url = url; 
    } 

    @Override 
    public void run() { 
     try { 
      // do http stuff // 
     } catch (ClientProtocolException e) { 
      Log.e("Uh oh", e); 
      //how can I report back with the handler about the 
      //error so I can update the UI 
     } 
    } 
} 

ответ

2

Отправить сообщение для обработчика, с некоторым кодом ошибки, например:

Message msg = new Message(); 
Bundle data = new Bundle(); 
data.putString("Error", e.toString()); 
msg.setData(data); 
replyTo.sendMessage(msg); 

В ручке handleMessage реализации обработчика этого сообщения.

Обработчик должен выглядеть следующим образом:

Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     Bundle data = msg.getData(); 
     if (data != null) { 
       String error = data.getString("Error"); 
       if (error != null) { 
        // do what you want with it 
       } 
     } 
    } 
}; 
1
@Override 
public void run() { 
    try { 
     // do http stuff // 
    } catch (ClientProtocolException e) { 
     Log.e("Uh oh", e); 
     //how can I report back with the handler about the 
     //error so I can update the UI 
     // you can use handleMessage(Message msg) 
     handler.sendEmptyMessage(-1) <-- sample parameter 
    } 
} 

Получить сообщение от Runnable здесь,

Handler handler = new Handler() { 
    public void handleMessage(Message msg) { 
     if(msg.what == -1) { 
      // report here 
     } 
    } 
}; 

Кроме обработчика вы можете использовать runOnUiThread,

@Override 
public void run() { 
    try { 
     // do http stuff // 
    } catch (ClientProtocolException e) { 
     Log.e("Uh oh", e); 
     //how can I report back with the handler about the 
     //error so I can update the UI 
     runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      // report here 
      } 
     } 
    } 
}