簡體   English   中英

在打開新的活動之前,使用進度條發出HTTP請求:如何?

[英]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 ..

  • 將開始的ProgressDialog代碼放在AsyncTask的onPreExecute()中。
  • 將您的HttpRequest放在AsyncTask的doInBackGround()中。
  • 現在,刪除(解雇)在ProgressDailog onPostExecute()並開始在一個新的活動onPostExecute()

簡單..

我認為您的問題是您將http請求放入UI線程,自Android 3.0以來這是禁止的

我認為您應該檢查此鏈接: httpGet請求錯誤

我建議閱讀有關AsyncTask的文章。 請看一下本教程(http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask) ,以獲取幾乎准確的示例。

您不能執行在UI線程中花費超過5秒的操作。 為此使用異步任務

在上一個請求完成后調用下一個http請求(由於任務正在運行Async),並更新進度欄。

最好使用偵聽器接口來處理異步任務完成

腳步 :

  1. 調用異步任務以擁有第一個http請求。
  2. 任務完成后,從后執行部分編寫代碼以調用其相應的完成偵聽器。
  3. 在完成的偵聽器中,啟動下一個http請求並更新進度。
  4. 只要提出了所有請求,便繼續。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM