Android 更新进度对话框
我对的progressdialog有问题,我希望在连接持续期间更新我的progressdialog 这是我的对话Android 更新进度对话框,android,android-asynctask,progressdialog,updating,Android,Android Asynctask,Progressdialog,Updating,我对的progressdialog有问题,我希望在连接持续期间更新我的progressdialog 这是我的对话 Pro = new ProgressDialog(getParent()); Pro.setMessage("Enviando"); Pro.setIndeterminate(false); Pro.setMax(100); Pro.setCancelable(false); Pro.setProgressStyle(ProgressDialo
Pro = new ProgressDialog(getParent());
Pro.setMessage("Enviando");
Pro.setIndeterminate(false);
Pro.setMax(100);
Pro.setCancelable(false);
Pro.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
这是我的任务
private class NuevoPostVideo extends AsyncTask<String, Integer, String>{
@Override
protected String doInBackground(String... params) {
objAcceso = new AccesoBd();
String jsRes= "";
SharedPreferences userDetails = getParent().getSharedPreferences("MisPreferencias", MODE_PRIVATE);
try{
File f = new File(sDireccionFoto);
FileBody bin = new FileBody(f);
StringBody from = new StringBody( Integer.toString(userDetails.getInt("Id",0)));
StringBody id_recurso = new StringBody(Integer.toString(idEvento));
StringBody titulo_body = new StringBody(txtVTitulo.getText().toString());
StringBody ficha = new StringBody("null");
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("imageFile", bin);
reqEntity.addPart("from",from);
reqEntity.addPart("idrecurso",id_recurso);
reqEntity.addPart("titulo", titulo_body);
reqEntity.addPart("ficha", ficha);
objAcceso.conxDatosInPost(params[0],reqEntity);
jsRes="ok";
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{return jsRes;}
}
@Override
protected void onPostExecute( String result) {
if (result.equals("ok")){
SharedPreferences userDetails = getParent().getSharedPreferences("MisPreferencias", MODE_PRIVATE);
DetalleEvento objd = new DetalleEvento();
objd.setTipo(1);
objd.setFecha(objAcceso.FechaActualinglesa());
objd.setTituloPost(sTituloPost);
objd.setImagen(btmImagenElegida);
objd.setUrl(sDireccionFoto);
objd.setAutor(userDetails.getString("Nombre","Usted"));
objAdapterDetalles.arrayDatos.add(0,objd);
objAdapterDetalles.notifyDataSetChanged();
lstDatos.setSelection(1);
dOpciones.dismiss();
dHacerVideo.dismiss();
}
Pro.dismiss();
prgVProgreso.setVisibility(View.INVISIBLE);
}
@Override
protected void onPreExecute() {
//prgVProgreso.setVisibility(View.VISIBLE);
Pro.show();
//Pro.incrementProgressBy(10);
}
@Override
public void onProgressUpdate(Integer... args){
Pro.setProgress(args[0]);
}
}
?我可以在连接持续时更新我的进度对话框吗
更新
我无法计算要插入的文件的大小(本例中为视频),也无法查看每次上传到服务器的进度
找不到这样做的方法
我想知道是否有可能采用某种听众风格
请帮助我或给我一个提示查看以下示例:
私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
int count=url.length;
长totalSize=0;
for(int i=0;i
您可以使用处理程序根据AsyncTask
的doInBackground(…)
中发生的内容的状态来更新ProgressDialog
。我想这对你来说太完美了。只需使用Handler.sendmsg(msg)
发送处理程序
一条消息
,这样它就可以更新进程对话框
,最终解决我的问题,如下所示
这就是我的代码
public class NuevoPostVideoConProgreso extends AsyncTask<String, Integer, String>{
ProgressDialog dialogProgreso;
long totalSize;
@Override
protected String doInBackground(String... params) {
objAcceso = new AccesoBd();
String res = "";
SharedPreferences userDetails = getParent().getSharedPreferences("MisPreferencias", MODE_PRIVATE);
try{
CMultipartContador objconSub = new CMultipartContador(new CMultipartContador.ProgressListener() {
@Override
public void transferred(long num) {
// TODO Auto-generated method stub
float antes = (float)(num /(float) totalSize);
float despues =(float)(antes * 100);
int numero = (int) despues;
publishProgress(numero);//(int) ((num /(float) totalSize) * 100));
}
} );
File f = new File(sDireccionFoto);
FileBody bin = new FileBody(f);
StringBody from = new StringBody( Integer.toString(userDetails.getInt("Id",0)));
StringBody id_recurso = new StringBody(Integer.toString(idEvento));
StringBody titulo_body = new StringBody(txtVTitulo.getText().toString());
StringBody ficha = new StringBody("null");
// MultipartEntity reqEntity = new MultipartEntity();
objconSub.addPart("imageFile", bin);
objconSub.addPart("from",from);
objconSub.addPart("idrecurso",id_recurso);
objconSub.addPart("titulo", titulo_body);
objconSub.addPart("ficha", ficha);
totalSize= objconSub.getContentLength();
// dialogProgreso.setMax((int)totalSize);
objAcceso.conxDatosInPostAsynctask(params[0],objconSub);
dialogProgreso.setProgress(100);
res= "ok";
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{return res;}
}
@Override
protected void onPostExecute( String result) {
dialogProgreso.setProgress(100);
dialogProgreso.dismiss();
dOpciones.dismiss();
dHacerVideo.dismiss();
LlenarEvento();
}
@Override
protected void onPreExecute() {
dialogProgreso = new ProgressDialog(getParent());
dialogProgreso.setMessage("Subiendo...");
dialogProgreso.setIndeterminate(false);
//dialogProgreso.setMax(100);
dialogProgreso.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//dialogProgreso.setProgress(0);
dialogProgreso.setCancelable(false);
dialogProgreso.show();
//dialogProgreso.setProgress(3);
}
@Override
public void onProgressUpdate(Integer... args){
dialogProgreso.setProgress(args[0]);
}
}
private ImageView aniadirImagen(Bitmap btmi){
ImageView img= new ImageView(getParent());
img.setImageBitmap(btmi);
btmi.recycle();
return img;
}
但我的url是一个单一的。mi conexion是一个php,不返回一个整数。请以粗体查看我的参考资料,以便您知道我的意思是从响应中读取内容长度标题,并根据总响应大小(内容长度)和已从响应中读取的数据更新进度…我不理解您的意思我只能在建立连接后执行此操作,而不是之前,ie我需要在运行网络连接时进行更新,读取数据在代码中是一项耗时的任务,因此您可以将其作为进度更新的基础。。
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
public class NuevoPostVideoConProgreso extends AsyncTask<String, Integer, String>{
ProgressDialog dialogProgreso;
long totalSize;
@Override
protected String doInBackground(String... params) {
objAcceso = new AccesoBd();
String res = "";
SharedPreferences userDetails = getParent().getSharedPreferences("MisPreferencias", MODE_PRIVATE);
try{
CMultipartContador objconSub = new CMultipartContador(new CMultipartContador.ProgressListener() {
@Override
public void transferred(long num) {
// TODO Auto-generated method stub
float antes = (float)(num /(float) totalSize);
float despues =(float)(antes * 100);
int numero = (int) despues;
publishProgress(numero);//(int) ((num /(float) totalSize) * 100));
}
} );
File f = new File(sDireccionFoto);
FileBody bin = new FileBody(f);
StringBody from = new StringBody( Integer.toString(userDetails.getInt("Id",0)));
StringBody id_recurso = new StringBody(Integer.toString(idEvento));
StringBody titulo_body = new StringBody(txtVTitulo.getText().toString());
StringBody ficha = new StringBody("null");
// MultipartEntity reqEntity = new MultipartEntity();
objconSub.addPart("imageFile", bin);
objconSub.addPart("from",from);
objconSub.addPart("idrecurso",id_recurso);
objconSub.addPart("titulo", titulo_body);
objconSub.addPart("ficha", ficha);
totalSize= objconSub.getContentLength();
// dialogProgreso.setMax((int)totalSize);
objAcceso.conxDatosInPostAsynctask(params[0],objconSub);
dialogProgreso.setProgress(100);
res= "ok";
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{return res;}
}
@Override
protected void onPostExecute( String result) {
dialogProgreso.setProgress(100);
dialogProgreso.dismiss();
dOpciones.dismiss();
dHacerVideo.dismiss();
LlenarEvento();
}
@Override
protected void onPreExecute() {
dialogProgreso = new ProgressDialog(getParent());
dialogProgreso.setMessage("Subiendo...");
dialogProgreso.setIndeterminate(false);
//dialogProgreso.setMax(100);
dialogProgreso.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//dialogProgreso.setProgress(0);
dialogProgreso.setCancelable(false);
dialogProgreso.show();
//dialogProgreso.setProgress(3);
}
@Override
public void onProgressUpdate(Integer... args){
dialogProgreso.setProgress(args[0]);
}
}
private ImageView aniadirImagen(Bitmap btmi){
ImageView img= new ImageView(getParent());
img.setImageBitmap(btmi);
btmi.recycle();
return img;
}
public class CMultipartContador extends MultipartEntity {
private final ProgressListener listener;
public CMultipartContador(final ProgressListener listener)
{
super();
this.listener = listener;
}
public CMultipartContador(final HttpMultipartMode mode, final ProgressListener listener)
{
super(mode);
this.listener = listener;
}
public CMultipartContador(HttpMultipartMode mode, final String boundary, final Charset charset, final ProgressListener listener)
{
super(mode, boundary, charset);
this.listener = listener;
}
@Override
public void writeTo(final OutputStream outstream) throws IOException
{
super.writeTo(new CountingOutputStream(outstream, this.listener));
}
public static interface ProgressListener
{
void transferred(long num);
}
public static class CountingOutputStream extends FilterOutputStream
{
private final ProgressListener listener;
private long transferred;
public CountingOutputStream(final OutputStream out, final ProgressListener listener)
{
super(out);
this.listener = listener;
this.transferred = 0;
}
public void write(byte[] b, int off, int len) throws IOException
{
out.write(b, off, len);
this.transferred += len;
this.listener.transferred(this.transferred);
}
public void write(int b) throws IOException
{
out.write(b);
this.transferred++;
this.listener.transferred(this.transferred);
}
}