要本身的程序鏈接網絡首先要在清單文件中設置權限
android鏈接網絡有httpUrlconnection和httpClient兩種方法文檔建議使用HttpUrlConnection方法
清單文件中的設置
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
程序鏈接網絡須要的步驟:
一、檢查手機正在活動的網絡:
二、繼承AsynTask開另外一個線程處理下載任務:
1)處理下載任務首先要構建一個url;
2)從url獲取HttpUrlConnection
3)設置讀取超時時間、鏈接超時時間、請求方式以及進行鏈接
4)獲取服務器返回碼(200b表示成功)
5)獲取成功後處理服務器傳來的字節流轉成程序要使用的類型
實現程序鏈接網絡下載文件的小Demo ,這裏面用到AsynTask類,它是一個異步類開啓另外一個線程執行下載任務這種耗時任務,與直接繼承Thread方法和實現Runnable藉口相比這個方法與UI主線程的通訊更加方便
這個抽象類須要:
實現doInBackground這個抽象方法。在這個方法之中處理耗時任務。
另外還有幾個常常須要重寫的方法:
一、onPostExecute 這個方法用來更新UI
二、onProgressUpdate(Progress... values) 這個方法用來處理耗時任務的處理進度 ,主線程調用此方法顯示處理進度
注意事項
使用這個類時只能被執行一次,它的實例只能在主線程中new出來,在主線程中執行execute,主線程不能調用asynTask中的doInBackground 、 onPostExecute、 onProgressUpdate方法
/**
* 在清單文件中獲取權限
* 一、檢查網絡鏈接是否通暢,調用ConnectivityManager中的getActiveNetWorkInfo得到當錢活動網絡
* 二、繼承AsynTask類完成下載線程的處理任務
* 1)重寫doInBackground方法 處理下載任務
* 2)重寫onPostExecute方法 將下載的數據傳給UI 更新
*
* 三、處理下載任務時 首先new一個URL 根據url得到httpUrlconnection
* 而後設置鏈接超時 讀取超時以及請求方式和doinput
* 而後接受服務器返回碼(200表示接收成功)
* 最後處理接受的字節流
* */
public class DL_Pic_MainActivity extends Activity {
MyTask myTask=null;
ImageView imageView;
boolean flag =true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dl__pic__main);
//註冊ImageView組件接受下載的圖片
imageView = (ImageView)findViewById(R.id.imageView1);
//接受網絡鏈接服務
ConnectivityManager connManager =(ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
//獲取正在工做的可用網絡
NetworkInfo networkInfo =connManager.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected())
{
//若是有可用的網絡 開一個線程下載
myTask = new MyTask();
}else{
Toast.makeText(getApplicationContext(), "無網絡鏈接,請檢查網絡鏈接", Toast.LENGTH_SHORT).show();
}
}
//線程下載類
//異步類 此類有
class MyTask extends AsyncTask<String, Void, Drawable>{
//執行下載
@Override
protected Drawable doInBackground(String... params) {
// TODO Auto-generated method stub
Drawable bitmap=null;
try {
bitmap=downloadUrl(params[0]);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap ;
}
//將下載的數據傳給ui更新ui
@Override
protected void onPostExecute(Drawable result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
imageView.setImageDrawable(result);
}
}
//下載方法
private Drawable downloadUrl(String url) throws Exception{
Drawable bitmap=null;
//構建url
URL myUrl = new URL(url);
//根據url獲取HttpURLConnection並生設置讀取超時時間、鏈接超時間、接受請求方式doinput
HttpURLConnection httpUrlConn =(HttpURLConnection) myUrl.openConnection();
httpUrlConn.setReadTimeout(1000);
httpUrlConn.setConnectTimeout(1500);
httpUrlConn.setRequestMethod("GET");
httpUrlConn.setDoInput(true);
httpUrlConn.connect();
if(httpUrlConn.getResponseCode()==200){
//獲取下載得字節流
InputStream is=httpUrlConn.getInputStream();
//將字節流轉換成能使用的Drawable類型
bitmap = new BitmapDrawable(is);
}else{
Toast.makeText(getApplicationContext(), "服務器忙", Toast.LENGTH_SHORT).show();
}
return bitmap;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_dl__pic__main, menu);
return true;
}
//點擊button事件執行下載,這個點擊事件方法不會控制使execute方法執行一次所以用了一個標記............
public void btnOnclick(View view){
if(flag){
myTask.execute("http://www.google.com.hk/logos/2012/clara_schuman-2012-hp.jpg");
flag=false;
}
}
}