Android 访问网络系列(一)

任何形式的访问网络之前,首先应该 加上相应的权限:<uses-permission  android:name="android.permission.INTERNET"/>。

1、打开网页:可以调用Android 内置的浏览器打开网页

private void surfInternet(){
	Uri uri = Uri.parse("http://www.sohu.com");
	Intent it = new Intent(Intent.ACTION_VIEW,uri);
	startActivity(it);
}
备注:Uri 和URI是有很大区别的,写的时候注意。

2、从网络上下载图片显示:通过HttpUrlConnection接口进行操作连接

private void surfInternet(){
	try {
		URL url = new URL("http://photocdn.sohu.com/20111123/Img326603573.jpg");
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setConnectTimeout(6*1000);
		conn.setDoInput(true);
		conn.connect();
		InputStream is = conn.getInputStream();
		bt = BitmapFactory.decodeStream(is);
		is.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} 
}	
在onCreate()方法中,点击按钮获取图片

btn.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		new Thread(new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				surfInternet();
			}
		}).start();
		iv.setImageBitmap(bt);
	}
});

需要注意的是,Android 4.0以后的版本,在主线程中是不允许访问网络的,所以需要开辟新的线程执行点击操作,这点需要注意!如果是从网上下载图片,那么就不能加conn.setDoOutput(true),否则会报错。

系统默认的是使用GET方式访问,如果我们使用POST,那么就是上传修改数据了。GET好比数据库里的查询操作,而POST好比是改操作,刚试了下,如果使用POST方式,则无法下载,这点需要注意。使用POST方式写入操作如下:

<pre name="code" class="java">try {  
    // 使用HttpURLConnection打开连接  
    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
    //因为这个是post请求,设立需要设置为true  
    urlConn.setDoOutput(true);  
    urlConn.setDoInput(true);  
    // 设置以POST方式  
    urlConn.setRequestMethod("POST");  
    // Post 请求不能使用缓存  
    urlConn.setUseCaches(false);  
    urlConn.setInstanceFollowRedirects(true);  
    // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的 ,如果不配置,可能会 报异常
    urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
    // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,  
    // 要注意的是connection.getOutputStream会隐含的进行connect。  
    urlConn.connect();  
    //DataOutputStream流  
    DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());  
    //要上传的参数  
    String content = "par=" + URLEncoder.encode("ABCDEFG", "gb2312");  
    //将要上传的内容写入流中  
    out.writeBytes(content);   
    //刷新、关闭  
    out.flush();  
    out.close();  
}

 

其实在上述代码中,存在一个小问题,就是点击按钮第一次之后没有反应,第二次才会显示,发现犯了一个错误,就是我将setImage()方法写在了onCreate()方法里,这样立即执行了,而此时的bt是null,还没有获取,因为是开辟了另外线程,所以程序立即执行,并不是等获取完之后再执行。那么更正如下,在surfInternet()方法里添加更新UI的代码即可。

runOnUiThread(new Runnable() {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		iv.setImageBitmap(bt);
	}
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值