Android的 - 的AsyncTask,进度和I / O(android - asynctask

2019-09-22 02:16发布

我很张贴类似的问题,我以前的一个遗憾,但我只是不明白这一点。

我一直在使用简单的“ping”例如,我发现在这里 ,只是想补充进度,但没有运气。 我真不明白这是怎么回事。

所以,这工作得很好:

    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);
}

我从平输出,myBar显然不是diplayed,因为它是第一个地方看不到的。

如果我删除从我标记为问题(设定进度条能见度可见)行了评论,我根本拿不出从平输出。 我看来,它在某种程度上打乱了我的I / O或东西。 进度条显示和隐藏在年底,但没有输出。

我真的不知道这一点,所以如果你有任何想法,我会很感激的任何帮助。

谢谢!!!

Answer 1:

尝试创建编程在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();


Answer 2:

你重写onProgressUpdate? 如果不重写onProgressUpdate像下面和更新不管你在这方法需要你的进度条/文本视图。

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

从你的代码的可见你叫publishProgress但你不传递任何value.Just通过您检索,这样值BS:

publishProgress(bs);

并更新与BS的balue进度条



文章来源: android - asynctask, progressbar and I/O