从AsyncTask的更新进度对话框进度不能建立 [英] Updating progress on progress dialog from AsyncTask can't build

查看:285
本文介绍了从AsyncTask的更新进度对话框进度不能建立的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不能建立我的项目,因为日食给错误

下面是按钮单击事件谁开始下载

  button.setOnClickListener(新View.OnClickListener(){
    @覆盖
    公共无效的onClick(视图v){
        ProgressDialog mProgressDialog;
        mProgressDialog =新ProgressDialog(Test.this);
        mProgressDialog.setMessage(Pobieranie);
        mProgressDialog.setIndeterminate(假);
        mProgressDialog.setMax(100);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        DownloadFile downloadFile =新DownloadFile();
        downloadFile.execute(http://google.com);
    }
});

和AsyncTask的功能

 私有类DownloadFile扩展的AsyncTask<字符串,整数,字符串> {
    [...]
    @覆盖
    在preExecute保护无效(){
        super.on preExecute();
        mProgressDialog.show(); //这里日食告诉mProgressDialog解决不了
    }    @覆盖
    保护无效onProgressUpdate(整数...进度){
        super.onProgressUpdate(进度);
        mProgressDialog.setProgress(进展[0]); //这里日食告诉mProgressDialog解决不了
    }
}

那么,我应该插入code谁创建我的进度对话框?


解决方案

 嘿,你需要提供数
在此输入code 私有类DownloadFile扩展的AsyncTask<字符串,整数,字符串> {
    ProgressDialog mProgressDialog;
    字符串文件名= NULL;
    @覆盖
    在preExecute保护无效(){
        super.on preExecute();
        //创建进度
         mProgressDialog =新ProgressDialog(Task.this);
        //设置你的进度标题
        mProgressDialog.setTitle(下载);
        mProgressDialog.setIcon(R.drawable.dwnload);
        //设置您的进度信息
        mProgressDialog.setMessage(更新应用程序版本,请等一下!);
        mProgressDialog.setIndeterminate(假);
        mProgressDialog.setMax(100);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        //显示进度
        mProgressDialog.setCancelable(假);
      // mProgressDialog.setCanceledOnTouchOutside(假);
        mProgressDialog.show();
    }    @覆盖
    保护字符串doInBackground(字符串... SURL){
        尝试{
                           字符串apkurl =htt​​p://google.com/\"+fileName;
                    网址URL =新的URL(apkurl);
                    HttpURLConnection的C =(HttpURLConnection类)网址
                            .openConnection();
                    c.setRequestMethod(GET);
                    c.setDoOutput(真);
                    c.connect();
                    INT文件长度= c.getContentLength();
                    //文件文件=新的文件(路径);
                    如果(file.exists())
                    {
                        file.delete();
                    }
                    file.mkdirs();
                    文件OUTPUTFILE =新的文件(文件,文件名);
        最终的FileOutputStream FOS =新的FileOutputStream(OUTPUTFILE);                    最后InputStream为= c.getInputStream();            字节的数据[] =新的字节[1024];
            总长= 0;
            诠释计数;
            而((计数= is.​​read(数据))!= - 1){
                总+ =计数;
                //发布进度
                publishProgress((int)的(总* 100 /文件长度));
                fos.write(数据0,计);
            }            //关闭连接
            fos.flush();
            fos.close();
            is.close();            }    }    赶上(例外五){
            //错误日志
            Log.e(错误,e.getMessage());
            e.printStackTrace();
        }
        返回null;
 }    @覆盖
    保护无效onPostExecute(字符串结果){
        // TODO自动生成方法存根
     mProgressDialog.dismiss();    }    @覆盖
    保护无效onProgressUpdate(整数...进度){
        super.onProgressUpdate(进度);
        //更新进度
        mProgressDialog.setProgress(进展[0]);    }}

I can't build my project because eclipse giving error

Here is button click event who starting download

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ProgressDialog mProgressDialog;
        mProgressDialog = new ProgressDialog(Test.this);
        mProgressDialog.setMessage("Pobieranie");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.setMax(100);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        DownloadFile downloadFile = new DownloadFile();
        downloadFile.execute("http://google.com");
    }
});

and AsyncTask function

private class DownloadFile extends AsyncTask<String, Integer, String> {
    [...]
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog.show(); // Here eclipse tell that "mProgressDialog cannot be resolved"
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);
        mProgressDialog.setProgress(progress[0]); // Here eclipse tell that "mProgressDialog cannot be resolved"
    }
}

So where I should insert code who create my progress dialog?

解决方案

Hey you need to provide count 
enter code here

 private class DownloadFile extends AsyncTask<String, Integer, String> {
    ProgressDialog  mProgressDialog;
    String fileName=null;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create ProgressBar
         mProgressDialog = new ProgressDialog(Task.this);
        // Set your ProgressBar Title
        mProgressDialog.setTitle("Downloads");
        mProgressDialog.setIcon(R.drawable.dwnload);
        // Set your ProgressBar Message
        mProgressDialog.setMessage("Updating App Version, Please Wait!");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.setMax(100);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        // Show ProgressBar
        mProgressDialog.setCancelable(false);
      //  mProgressDialog.setCanceledOnTouchOutside(false);
        mProgressDialog.show();
    }

    @Override
    protected String doInBackground(String... sUrl) {
        try {


                           String apkurl = "http://google.com/"+fileName;
                    URL url = new URL(apkurl);
                    HttpURLConnection c = (HttpURLConnection) url
                            .openConnection();
                    c.setRequestMethod("GET");
                    c.setDoOutput(true);
                    c.connect();
                    int fileLength = c.getContentLength();


                    //File file = new File(PATH);
                    if(file.exists())
                    {
                        file.delete();
                    }
                    file.mkdirs();
                    File outputFile = new File(file, fileName);
        final FileOutputStream fos = new FileOutputStream(outputFile);

                    final InputStream is = c.getInputStream();







            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = is.read(data)) != -1) {
                total += count;
                // Publish the progress
                publishProgress((int) (total * 100 / fileLength));
                fos.write(data, 0, count);
            }

            // Close connection
            fos.flush();
            fos.close();
            is.close();



            }





    }

    catch (Exception e) {
            // Error Log
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;


 }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
     mProgressDialog.dismiss();



    }



    @Override
    protected void onProgressUpdate(Integer... progress) {


        super.onProgressUpdate(progress);
        // Update the ProgressBar
        mProgressDialog.setProgress(progress[0]);



    }



}

这篇关于从AsyncTask的更新进度对话框进度不能建立的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆