Android Activity MainThread 中不能執行http通信解決辦法
今天在做離線文件傳輸時。用HTTP上傳文件。程序一運行 報如下的錯誤
原因是Google從3開始,強制默認禁止UI主線程發起通信請求
解決辦法:
把通信的代碼轉移到子線程里去做, 比較靠譜的是new一個AyncTask,在里面做通信
有幾個細節性的問題是,
第一, 一般原有通信的代碼都是共通的API, 被許多個Activity調用, 一個良好的修改方法是在共通API里面new AyncTask
第二, 通信的API一般來說都是同步的, 你通信,然后畫面主線程需要堵塞住,等待API的通信結果,再決定下面的業務邏輯的走向。
所以,這塊可以采取 AyncTask.get(), 讓主線程堵塞,直到通信結束。 當然,如果你需要將通信異步的話, 可以用Handler機制來解決
具體調用代碼如下:HTTP異
步請求




















































調用代碼如下:
Object[] param = new Object[5];
param[0] = answer.getUploadURL();
param[1] = answer.getStreamid();
param[2] = new File(answer.getFileURL());
param[3] = "false";
param[4] = "";
AsyncTask res = new HttpReqTask().execute(param);
HttpResponse rep = null;
rep = (HttpResponse) res.get();
if (rep.getStatusLine().getStatusCode() == 200) {
System.out.println("文件上傳成功");
}else{
System.out.println("文件上傳失敗");
}
}
posted @ 2013-07-11 10:51 MikyTan 閱讀(1087) | 評論 (0) | 編輯 收藏