看了好多下載文本的例子,覺得寫得都不是很通俗易懂,我寫一個比較簡單易懂的代碼。
package com.example.demodownload;import android.app.Activity;import android.app.ProgressDialog;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {private Button button;private TextView show;private String str;private ProgressDialog mypDialog;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button1);show = (TextView) findViewById(R.id.textView1);button.setOnClickListener(new OnClickListener() {public void onClick(View v) {DownLoadThread thread = new DownLoadThread();thread.start();}});mypDialog = new ProgressDialog(this);// 執行個體化mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 設定進度條風格,風格為圓形,旋轉的mypDialog.setTitle("登陸");// 設定ProgressDialog 標題mypDialog.setMessage("正在下載請稍後");// 設定ProgressDialog 提示資訊mypDialog.setIndeterminate(false);// 設定ProgressDialogmypDialog.setCancelable(true);// 設定ProgressDialog// 是否可以按退回按鍵取消}Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:// 開始下載標誌mypDialog.show();// 讓ProgressDialog顯示break;case 2:// 結束下載標誌mypDialog.cancel();show.setText(str);break;}}};private class DownLoadThread extends Thread {@Overridepublic void run() {Message msg = new Message();msg.what = 1;// 開始下載標誌1handler.sendMessage(msg);HttpDownloader http = new HttpDownloader();str = http.download("http://m.weather.com.cn/data/101010100.html");msg = new Message();// 必須這樣寫,不然會報錯。因為msg.what一般是final類型的msg.what = 2;handler.sendMessage(msg);}}}
布局檔案就不貼了,主要是一個按鈕和一個button。貼一下下載文本的類吧
package com.example.demodownload;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;public class HttpDownloader {// 根據URL下載檔案,前提是這個檔案當中的內容是文本,函數的傳回值就是文本當中的內容// 1.建立一個URL對象// 2.通過URL對象,建立一個HttpURLConnection對象// 3.得到InputStream// 4.從InputStream當中讀取資料private URL url;public String download(String urlStr) {StringBuffer sb = new StringBuffer();String line = null;BufferedReader buffer = null;try {url = new URL(urlStr);HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));while ((line = buffer.readLine()) != null) {sb.append(line);}} catch (Exception e) {e.printStackTrace();} finally {try {if (buffer != null) {buffer.close();} else {return "error";}} catch (IOException e) {e.printStackTrace();}}return sb.toString();}}
對了,別忘了配置網路許可權呀。
讓我很奇怪的是manifest.xml檔案,下面是正確的寫法
<uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
如果寫成下面這樣就會報錯,原因是下載的時候,buffer為空白,在網上找了半天不知道怎麼回事,有哪位知道是怎麼回事,可以留言。我這裡先謝謝了。
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
好了,這樣在運行下載檔案或者解析網路資源的時候,可以給使用者一個很友好的互動介面,讓他等待,當然可以設定下載的過程,這個progressBar只是提示,沒有進度的體現。使用另一種progressBar可以很友好的提示下載的進度,這個我過一段時間再貼出來。