学习笔记-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;
    	}
    	
    	
    }
}
相关文章
相关标签/搜索