tutorial - android-asynctask, barra de progreso y E/S
progressbar asynctask android (2)
Lamento publicar una pregunta similar a la anterior, pero no puedo resolverlo.
He estado usando un simple ejemplo de "ping" que encontré aquí y solo quería agregar ProgressBar pero sin suerte. Realmente no entiendo lo que está pasando.
Entonces, esto funciona bien:
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);
}
Recibo un resultado de ping, myBar obviamente no se muestra, ya que es invisible en primer lugar.
Si elimino el comentario de la línea que marqué como problema (establezca la visibilidad de la barra de progreso como visible), simplemente no obtengo salida del ping. Parece que de alguna manera arruina mi E / S o algo así. ProgressBar se muestra y se oculta al final, pero sin salida.
Realmente no puedo resolver esto, así que si tienes alguna idea, realmente agradecería cualquier ayuda.
¡¡¡Gracias!!!
Intente crear mediante programación un ProgressDialog en el método OnPreExecute () y deséchelo una vez que finalice la tarea en onPostExecute (). Aquí hay un código:
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();
¿Has anulado en ProgressUpdate ? Si no anula el progreso de actualización como a continuación y actualice su barra de progreso / texto visualice lo que desee en este método.
@Override
protected void onProgressUpdate(String... values) {
//update your progressbar here
someView.setText(values[0]);
}
desde su código es visible ha llamado a publishProgress pero no está pasando ningún valor. Simplemente pase el valor bs que recupera, como este:
publishProgress(bs);
y actualiza la barra de progreso con la barra de bs