0

いくつかの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);
        }
    });

....。

4

4 に答える 4

1

AsyncTaskを使用するだけです。

  • 開始ProgressDialogコードonPreExecute()をAsyncTaskに配置します。
  • HttpRequestdoInBackGround()AsyncTaskに配置します。
  • 次に、 ProgressDailogを削除(却下)しonPostExecute()、で新しいアクティビティを開始しonPostExecute()ます。

単純..

于 2012-08-23T12:04:05.647 に答える
0

ここでの問題は、Android3.0以降禁止されているUIスレッドにhttpリクエストを配置することだと思います

このリンクを確認する必要があると思います: httpGet Request error

于 2012-08-23T12:03:40.920 に答える
0

AsyncTaskについて読むことをお勧めします。このチュートリアル(http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask)を見て、あなたがやろうとしていることのほぼ正確な例を確認してください。

于 2012-08-23T12:05:51.077 に答える
0

UIスレッドで5秒以上かかる操作はできません。そのために非同期タスクを使用する

前のリクエストが完了した後(タスクは非同期を実行しているため)、次のhttpリクエストを呼び出し、進行状況バーを更新します。

非同期タスクの完了を処理するには、リスナーインターフェイスを使用することをお勧めします

手順:

  1. 非同期タスクを呼び出して、最初のhttpリクエストを取得します。
  2. タスクが完了したら、実行後のセクションから、対応する完了リスナーを呼び出すコードを記述します。
  3. 完了したリスナーから、次のhttpリクエストを開始し、進行状況を更新します。
  4. すべての要求が行われる限り続行します。
于 2012-08-23T12:18:21.783 に答える