建立连接时,有时可能会发生错误或wifi可能会关闭。因此,在这些情况下,我想向用户显示Toast消息。
所以我尝试过这样的事情:
protected String doInBackground (String ... args) {
QircAccount account = new MyAccount(getApplicationContext());
try {
acceptable = MyManager.INSTANCE.getService().getAcceptable(account.getUsername(), account.getAuthToken(), recId);
}
catch (RetrofitError re) {
Response r = re.getResponse();
if (r!=null && r.getStatus() == 403) {
isLoggedIn = false;
}
if (re.isNetworkError()) {
Toast.makeText(getBaseContext(), "Connectivity problem.", Toast.LENGTH_SHORT).show();
}
}
但这会产生如下错误:
Can't create handler inside thread that has not called Looper.prepare()
问题
onPostExecute
显示Toast消息?onPostExecute
?答案 0 :(得分:1)
嗯,你总是可以做到
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(.....).show();
}
});
答案 1 :(得分:0)
So its best to show Toast message in onPostExecute?
是的,因为onPostExecute
在UI线程中运行。
永远不要在另一个线程中调用Toast.makeText
,只有创建它的线程才会是唯一可以调用/更新它的线程。因此,您仍然可以通过调用UI线程runOnUiThread
来调用/更新其他线程。
How should I pass the message "connectivity problem" to onPostExecute?
只需将其作为字符串返回doInBackground
,因为它以字符串形式返回。
if (re.isNetworkError()) {
return "Connectivity problem.";
}
onPostExecute
中的
@Override
protected void onPostExecute(String result)
{
Toast.makeText(getBaseContext(), result, Toast.LENGTH_SHORT).show();
}