[英]Make HTTP requests with progress bar, before opening a new Activity: how?
我有一段代碼可以通過簡單地調用一些URL來設置一些網絡IP攝像機參數。 URL(為簡化起見)采用“ http://mydomain.com:portnumber/setalarm.cgi”格式,並且我使用常規的HttpGet / HttpResponse機制來調用URL並獲取結果狀態(如果良好則為200,否則為不良) )。 現在:由於要調用的URL依次為8個或更多(我使用for循環),所以我想顯示一個進度條(或簡單的進度指示器),以使用戶知道正在執行不同的URL調用。 當所有8個呼叫都完成后,我希望顯示一個新的Actity及其結果(OK或KO凸輪列表中的KO)。
我嘗試了許多在此站點上找到的解決方案,但是沒有一個成功的解決方案(線程,進度欄,對話框欄,異步任務等)。 在處理完成之前,我得到了異常,或者沒有顯示該條,或者出現了新的“活動”。
有人可以幫忙嗎? 現在,這是我的代碼的相關部分:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainlayout);
// ON button
Button myButton1 = (Button) findViewById (R.id.button1);
myButton1.setOnClickListener(new OnClickListener() {
public void onClick(final View arg0) {
intGoodCamera = 0;
intBadCamera = 0;
for (int i = 0; i<intNumCam; i++) {
System.out.println (intStartingPortNb+i);
String myurl = strIPAddress + ":" + (intStartingPortNb+i) + strSuffixSetAlarmOn;
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(myurl);
HttpResponse response = null;
try {
response = httpClient.execute(httpGet, localContext);
System.out.println (response.getStatusLine().getStatusCode());
if (response.getStatusLine().getStatusCode() == 200)
intGoodCamera++;
else {
intBadCamera++;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println ("OK: "+intGoodCamera + " KO: "+ intBadCamera);
Intent nextIntent = new Intent(MainActivity.this, Results.class);
MainActivity.this.startActivity(nextIntent);
}
});
.....
只需使用AsyncTask ..
onPreExecute()
中。 doInBackGround()
中。 onPostExecute()
並開始在一個新的活動onPostExecute()
簡單..
我認為您的問題是您將http請求放入UI線程,自Android 3.0以來這是禁止的
我認為您應該檢查此鏈接: httpGet請求錯誤
我建議閱讀有關AsyncTask的文章。 請看一下本教程(http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask) ,以獲取幾乎准確的示例。
您不能執行在UI線程中花費超過5秒的操作。 為此使用異步任務
在上一個請求完成后調用下一個http請求(由於任務正在運行Async),並更新進度欄。
最好使用偵聽器接口來處理異步任務完成
腳步 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.