2

以前の質問と同様の質問を投稿して申し訳ありませんが、これを理解できません。

ここで見つけた単純な「ping」の例を使用していて、ProgressBar を追加したかっただけですが、うまくいきませんでした。何が起こっているのか本当にわかりません。

したがって、これは正常に機能します。

    protected void onPreExecute() {
    sb = new StringBuilder();
    mPOut = new PipedOutputStream();
    try {
        mPIn = new PipedInputStream(mPOut);
        mReader = new LineNumberReader(new InputStreamReader(mPIn));
    } catch (IOException e) {
        cancel(true);
    }
    //myBar.setVisibility(View.VISIBLE); -> PROBLEM!!!
}

protected Object doInBackground(Object... arg0) {
    try {
        process = Runtime.getRuntime().exec("ping -c 4 " + ipadd);
        InputStream in = process.getInputStream();
        OutputStream out = process.getOutputStream();
        byte[] buffer = new byte[1024];
        int count;
        while ((count = in.read(buffer)) != -1) {
            mPOut.write(buffer, 0, count);
            String bs= new String(buffer);
            publishProgress(); 
        }
        in.close();
        out.close();
        mPOut.close();
        mPIn.close();
    } catch (IOException e) {
    }
    return null;
}

protected void onPostExecute(Object result) {
            myBar.setVisibility(View.INVISIBLE);
            tv.setText(sb);
            System.out.println(sb);
}

ping から出力を取得します。そもそも myBar は表示されないため、明らかに表示されません。

問題としてマークした行からコメントを削除すると (プログレス バーの可視性を表示に設定)、ping から何も出力されません。どういうわけか私のI / Oか何かを台無しにしているようです。ProgressBar は表示され、最後に非表示になりますが、出力はありません。

どうしても分からないので、何かお分かりになる方がいらっしゃいましたら、よろしくお願いします。

ありがとう!!!

4

2 に答える 2

2

プログラムで OnPreExecute() メソッドで ProgressDialog を作成し、onPostExecute() でタスクが終了したらそれを閉じてみてください。コードは次のとおりです。

add to onPreExcute:
    super.onPreExecute();
    ProgressDialog pDialog = new ProgressDialog(YourActivity.this);
        pDialog.setMessage("Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();

add to onPostExecute:
   pDialog.dismiss();
于 2012-09-02T10:51:17.657 に答える
1

onProgressUpdateをオーバーライドしましたか? 以下のように onProgressUpdate をオーバーライドしない場合は、このメソッドで必要なプログレス バー/テキスト ビューを更新します。

@Override
protected void onProgressUpdate(String... values) {
    //update your progressbar here
someView.setText(values[0]);    
}

あなたのコードから、あなたはpublishProgressを呼び出しましたが、値を渡していません。取得した値bsを次のように渡します。

publishProgress(bs);

プログレスバーをbsの値で更新します

于 2012-10-26T14:32:22.817 に答える