学习笔记-android之connect to internet

要自己的程序连接网络首先要在清单文件中设置权限
android连接网络有httpUrlconnection和httpClient两种方法文档建议使用HttpUrlConnection方法

清单文件中的设置
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

程序连接网络需要的步骤:
1、检查手机正在活动的网络:
2、继承AsynTask开另一个线程处理下载任务:
       1)处理下载任务首先要构建一个url;
       2)从url获取HttpUrlConnection
       3)设置读取超时时间、连接超时时间、请求方式以及进行连接
       4)获取服务器返回码(200b表示成功)
       5)获取成功后处理服务器传来的字节流转成程序要使用的类型



实现程序连接网络下载文件的小Demo ,这里面用到AsynTask类,它是一个异步类开启另一个线程执行下载任务这种耗时任务,与直接继承Thread方法和实现Runnable借口相比这个方法与UI主线程的通信更加方便
这个抽象类需要:
实现doInBackground这个抽象方法。在这个方法之中处理耗时任务。
另外还有几个经常需要重写的方法:
1、onPostExecute     这个方法用来更新UI
2、onProgressUpdate(Progress... values)  这个方法用来处理耗时任务的处理进度 ,主线程调用此方法显示处理进度

注意事项
使用这个类时只能被执行一次,它的实例只能在主线程中new出来,在主线程中执行execute,主线程不能调用asynTask中的doInBackground 、 onPostExecute、 onProgressUpdate方法
/**
 * 在清单文件中获取权限
 * 1、检查网络连接是否通畅,调用ConnectivityManager中的getActiveNetWorkInfo获得当钱活动网络
 * 2、继承AsynTask类完成下载线程的处理任务
 *   1)重写doInBackground方法  处理下载任务
 *   2)重写onPostExecute方法  将下载的数据传给UI  更新
 * 
 * 3、处理下载任务时  首先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;
    	}
    	
    	
    }
}


转载于:https://my.oschina.net/chaosWL/blog/78465

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值