任何形式的访问网络之前,首先应该 加上相应的权限:<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);
}
});