Skip to content

Instantly share code, notes, and snippets.

@jackywyz
Created January 11, 2012 06:40
Show Gist options
  • Save jackywyz/1593411 to your computer and use it in GitHub Desktop.
Save jackywyz/1593411 to your computer and use it in GitHub Desktop.
Android tips
  1. 页面结构,提供一个button,点BUTTON时,去下载一个图片,main.xml设计如下:
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/hello"
  />
  < Button
  android:text="Start long running task.."
  android:id="@+id/startBtn"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  < /Button>
  < /LinearLayout>
  1. 主程序
  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 AndroAsync 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://image-7.verycd.com/0d7596f5db7df1742236466dc91311b1435702(120x120)/thumb.jpg";
          new DownloadFileAsync(this).execute(url);
      }
       
      class DownloadFileAsync extends AsyncTask<String, String, String> {
           
        public DownloadFileAsync (Context context){
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setButton("cancel", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int i) {
              dialog.cancel();
             }
            });
            mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
             public void onCancel(DialogInterface dialog) {
              finish();
             }
            });
            mProgressDialog.setCancelable(true);
            mProgressDialog.setMax(100);
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.show();


        }
          @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/picture.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) {
                  Log.e("error",e.getMessage().toString());
                  System.out.println(e.getMessage().toString());
              }
              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);
          }
           
           @Override
           protected void onCancelled() {
            super.onCancelled();
        }
      }
  }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment