學習筆記-android之connect to internet

要本身的程序鏈接網絡首先要在清單文件中設置權限
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;
    	}
    	
    	
    }
}
相關文章
相關標籤/搜索