2014-01-08 25 views
-1

我正在試圖製作一個應用程序,它將從網址下載網頁的源代碼並將其顯示在TextView。我也希望它顯示一個水平進度條而頁面正在後臺下載。我已經成功地在後臺使用Asynctask下載網頁,但我不知道如何根據後臺下載狀態找出網頁的大小並更新進度條。android-將水平進度條添加到AysncTask

這是我在做什麼,下載網頁源代碼 -

package com.example.gc; 

import java.io.IOException; 

import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
private TextView tv; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tv = (TextView) findViewById(R.id.cd); 
    grabURL("http://google.com"); 
} 

public void grabURL(String url) { 
    new GrabURL().execute(url); 
} 

private class GrabURL extends AsyncTask<String, Void, Void> { 
    private final HttpClient Client = new DefaultHttpClient(); 
    private String Content; 
    private String Error = null; 

    protected Void doInBackground(String... urls) { 
     try { 
      HttpGet httpget = new HttpGet(urls[0]); 
      ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
      Content = Client.execute(httpget, responseHandler); 

     } catch (ClientProtocolException e) { 
      Error = e.getMessage(); 
      cancel(true); 
     } catch (IOException e) { 
      Error = e.getMessage(); 
      cancel(true); 
     } 

     return null; 
    } 

    protected void onPostExecute(Void unused) { 
     if (Error != null) { 
      Toast.makeText(MainActivity.this, Error, Toast.LENGTH_LONG).show(); 
     } else { 
      // Toast.makeText(MainActivity.this, "Source: " + Content, Toast.LENGTH_LONG).show(); 
      tv.setText(Content); 
     } 
    } 

} 
} 

請幫我顯示在我的應用程序更新水平進度條。提前致謝!

回答

1

你只是想創建進度對話框到的AsyncTask onPreExecute()。如下圖所示:

ProgressDialog mProgressDialog; 
class DownloadFileAsync extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog = new ProgressDialog(getParent()); 
      mProgressDialog.setTitle("Please wait"); 
      mProgressDialog.setMessage("Downloading ..."); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mProgressDialog.setCancelable(false); 
      mProgressDialog.show(); 

    } 

    @Override 
    protected String doInBackground(String... aurl) { 
     int count; 

    try { 

      URL url = new URL(aurl[0]); 
      URLConnection conexion = url.openConnection(); 
      conexion.connect(); 
      //Downloading progress update 
      //your downloding logic over here 

       /* int lenghtOfFile= urlConnection.getContentLength(); 
       InputStream input = new BufferedInputStream(url.openStream()); 
       OutputStream output = newFileOutputStream(outputFile); 

       byte data[] = new byte[1024]; 

       long total = 0; 
        while ((count = input.read(data)) != -1) { 
         total += count; 
         publishProgress(""+(int)((total*100)/lenghtOfFile));*/ 

        } 

    } catch (Exception e) {} 
    return null; 

    } 
    @Override 
    protected void onProgressUpdate(String... progress) { 
     Log.d("ANDRO_ASYNC",progress[0]); 
         //Update Progress 
     mProgressDialog.setProgress(Integer.parseInt(progress[0])); 
    } 

    @Override 
    protected void onPostExecute(String unused) { 

     mProgressDialog.dismiss(); 

    } 
} 

在這裏,我向您展示如何實現水平進度對話框到AsyncTask.Now,通過自己的方式定製。

-1
private class GrabURL extends AsyncTask<String, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // Showing progress dialog 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Please wait..."); 
     pDialog.setCancelable(false); 
     pDialog.show(); 

    } 

    @Override 
    protected Void doInBackground(String... arg0) { 
     // download page 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     // Dismiss the progress dialog 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 
    } 

} 
0

this應該回答你的問題。只需發起HTTP請求即可獲取網頁的大小。

至於顯示在你的進度進度看看this