android-asynctask、progressbar和I/O
很抱歉,我发布了与前一个问题类似的问题,但我就是搞不懂 我一直在使用我找到的简单的“ping”示例,只想添加ProgressBar,但运气不好。我真的不明白发生了什么事 因此,这很好:android-asynctask、progressbar和I/O,android,io,android-asynctask,ping,android-progressbar,Android,Io,Android Asynctask,Ping,Android Progressbar,很抱歉,我发布了与前一个问题类似的问题,但我就是搞不懂 我一直在使用我找到的简单的“ping”示例,只想添加ProgressBar,但运气不好。我真的不明白发生了什么事 因此,这很好: protected void onPreExecute() { sb = new StringBuilder(); mPOut = new PipedOutputStream(); try { mPIn = new PipedInputStream(mPOut);
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在末尾显示和隐藏,但没有输出
我真的搞不懂,所以如果你有任何想法,我将非常感谢你的帮助
谢谢 尝试在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();
您是否覆盖了进程更新?如果不重写onProgressUpdate,请如下所示,并在此方法中更新进度条/文本视图
@Override
protected void onProgressUpdate(String... values) {
//update your progressbar here
someView.setText(values[0]);
}
从代码中可以看到,您调用了publishProgress,但没有传递任何值。只需传递您检索的值bs,如下所示:
publishProgress(bs);
并用bs的标题更新进度条,很抱歉响应太晚,但我只是尝试了一下,它不起作用。和我使用进度条时一样。对话框显示,隐藏后,但ping shell comamnd没有输出。的可能重复