Android 两个活动之间的进度条

Android 两个活动之间的进度条,android,android-progressbar,Android,Android Progressbar,我正在做一个非常简单的程序。我只想显示第一个和第二个活动之间的进度条 活动1只包含一个按钮,我一单击它,它就会在同一活动中显示一个进度条,并一直显示,直到第二个活动出现,其中只包含一条正在显示的消息。在做繁重的工作之前,调用第二个活动并从那里显示进度条会更有效。 看看AsyncTask类是如何工作的。我假设您希望在转到第二个活动时实现长时间运行的后台任务。如果是这种情况,则实施 AsyncTask有4种方法可以实现,但您可以执行以下操作: doInBackground()-在此处执行长期运行的任

我正在做一个非常简单的程序。我只想显示第一个和第二个活动之间的进度条


活动1只包含一个按钮,我一单击它,它就会在同一活动中显示一个进度条,并一直显示,直到第二个活动出现,其中只包含一条正在显示的消息。

在做繁重的工作之前,调用第二个活动并从那里显示进度条会更有效。
看看AsyncTask类是如何工作的。

我假设您希望在转到第二个活动时实现长时间运行的后台任务。如果是这种情况,则实施

AsyncTask有4种方法可以实现,但您可以执行以下操作:

  • doInBackground()
    -在此处执行长期运行的任务
  • onPostExecute()
    -移动到第二个活动

  • 每当有任何流程需要花费更多时间时,就会使用ProgressBar,然后我们应该使用异步任务并显示进度对话框,直到完成任务为止

    如果您有任何类似的要求,请遵循以下要求

    private class LongOperation extends AsyncTask<String, Void, String> 
    {
        protected void onPreExecute() 
        { 
            progressDialog = new ProgressDialog(activity.this); 
            progressDialog.setTitle("Processing...");
            progressDialog.setMessage("Please wait...");
            progressDialog.setCancelable(true);
            progressDialog.show();
        }
    
        protected String doInBackground(String... params) 
        {
            try 
            {
                //BackGround process();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        protected void onPostExecute(String result) 
        {
    
            progressDialog.dismiss();
            Intent n = new Intent(firstactivity.this, secondactivity.class);
            startActivity(n);
        }
      }
    

    看看这个例子,这将清除所有与概念相关的进度条和异步任务

    import java.io.BufferedInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URL;
    import java.net.URLConnection;
    
    import android.app.Activity;
    import android.app.Dialog;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class download extends Activity {
    
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
    private Button startBtn;
    private ProgressDialog mProgressDialog;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startBtn = (Button)findViewById(R.id.startBtn);
        startBtn.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                startDownload();
            }
        });
    }
    
    private void startDownload() {
        String url = "http://farm1.static.flickr.com/114/298125983_0e4bf66782_b.jpg";
        new DownloadFileAsync().execute(url);
    }
    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS:
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Downloading file..");
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
        }
    }
    
    class DownloadFileAsync extends AsyncTask<String, String, String> {
    
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
    
    @Override
    protected String doInBackground(String... aurl) {
        int count;
    
    try {
    
    URL url = new URL(aurl[0]);
    URLConnection conexion = url.openConnection();
    conexion.connect();
    
    int lenghtOfFile = conexion.getContentLength();
    Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
    
    InputStream input = new BufferedInputStream(url.openStream());
    OutputStream output = new FileOutputStream("/sdcard    /some_photo_from_gdansk_poland.jpg");
    
    byte data[] = new byte[1024];
    
    long total = 0;
    
        while ((count = input.read(data)) != -1) {
            total += count;
            publishProgress(""+(int)((total*100)/lenghtOfFile));
            output.write(data, 0, count);
        }
    
        output.flush();
        output.close();
        input.close();
    } catch (Exception e) {}
    return null;
    
    }
    protected void onProgressUpdate(String... progress) {
         Log.d("ANDRO_ASYNC",progress[0]);
         mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }
    
    @Override
    protected void onPostExecute(String unused) {
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
    }
    }
    
    import java.io.BufferedInputStream;
    导入java.io.FileOutputStream;
    导入java.io.InputStream;
    导入java.io.OutputStream;
    导入java.net.URL;
    导入java.net.URLConnection;
    导入android.app.Activity;
    导入android.app.Dialog;
    导入android.app.ProgressDialog;
    导入android.os.AsyncTask;
    导入android.os.Bundle;
    导入android.util.Log;
    导入android.view.view;
    导入android.view.view.OnClickListener;
    导入android.widget.Button;
    公共类下载扩展了活动{
    公共静态最终整型对话框\u下载\u进度=0;
    专用按钮startBtn;
    private ProgressDialog mProgressDialog;
    /**在首次创建活动时调用*/
    @凌驾
    创建时的公共void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    startBtn=(按钮)findViewById(R.id.startBtn);
    setOnClickListener(新的OnClickListener(){
    公共void onClick(视图v){
    startDownload();
    }
    });
    }
    私有void startDownload(){
    字符串url=”http://farm1.static.flickr.com/114/298125983_0e4bf66782_b.jpg";
    新建DownloadFileAsync().execute(url);
    }
    @凌驾
    受保护的对话框onCreateDialog(int id){
    开关(id){
    案例对话框\u下载\u进度:
    mProgressDialog=新建进度对话框(此);
    设置消息(“下载文件…”);
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_水平);
    mProgressDialog.setCancelable(假);
    mProgressDialog.show();
    返回mProgressDialog;
    违约:
    返回null;
    }
    }
    类DownloadFileAsync扩展AsyncTask{
    @凌驾
    受保护的void onPreExecute(){
    super.onPreExecute();
    showDialog(对话框下载进度);
    }
    @凌驾
    受保护的字符串背景(字符串…aurl){
    整数计数;
    试一试{
    URL=新URL(aurl[0]);
    URLConnection conexion=url.openConnection();
    conexion.connect();
    int lenghtOfFile=conexion.getContentLength();
    Log.d(“ANDRO_ASYNC”,“文件长度:“+lenghtOfFile”);
    InputStream输入=新的BufferedInputStream(url.openStream());
    OutputStream output=新文件OutputStream(“/sdcard/some_photo_from_gdansk_poland.jpg”);
    字节数据[]=新字节[1024];
    长总计=0;
    而((计数=输入。读取(数据))!=-1){
    总数+=计数;
    出版进度(“+(int)((总计*100)/长度文档));
    输出.写入(数据,0,计数);
    }
    output.flush();
    output.close();
    input.close();
    }捕获(例外e){}
    返回null;
    }
    受保护的void onProgressUpdate(字符串…进度){
    Log.d(“ANDRO_ASYNC”,progress[0]);
    mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }
    @凌驾
    受保护的void onPostExecute(字符串未使用){
    dismissDialog(对话框下载进度);
    }
    }
    }
    
    在切换到新活动之前或在显示新活动之后显示ProgressDialog,但数据仍在加载。你可以查一下。。。 在这里:

    在进行过程中应该发生什么?
    import java.io.BufferedInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URL;
    import java.net.URLConnection;
    
    import android.app.Activity;
    import android.app.Dialog;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class download extends Activity {
    
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
    private Button startBtn;
    private ProgressDialog mProgressDialog;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startBtn = (Button)findViewById(R.id.startBtn);
        startBtn.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                startDownload();
            }
        });
    }
    
    private void startDownload() {
        String url = "http://farm1.static.flickr.com/114/298125983_0e4bf66782_b.jpg";
        new DownloadFileAsync().execute(url);
    }
    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS:
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Downloading file..");
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
        }
    }
    
    class DownloadFileAsync extends AsyncTask<String, String, String> {
    
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
    
    @Override
    protected String doInBackground(String... aurl) {
        int count;
    
    try {
    
    URL url = new URL(aurl[0]);
    URLConnection conexion = url.openConnection();
    conexion.connect();
    
    int lenghtOfFile = conexion.getContentLength();
    Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
    
    InputStream input = new BufferedInputStream(url.openStream());
    OutputStream output = new FileOutputStream("/sdcard    /some_photo_from_gdansk_poland.jpg");
    
    byte data[] = new byte[1024];
    
    long total = 0;
    
        while ((count = input.read(data)) != -1) {
            total += count;
            publishProgress(""+(int)((total*100)/lenghtOfFile));
            output.write(data, 0, count);
        }
    
        output.flush();
        output.close();
        input.close();
    } catch (Exception e) {}
    return null;
    
    }
    protected void onProgressUpdate(String... progress) {
         Log.d("ANDRO_ASYNC",progress[0]);
         mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }
    
    @Override
    protected void onPostExecute(String unused) {
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
    }
    }