第十二篇:Android GET请求获取网络数据以及POST数据(使用HttpURLConnection)

它的工作原理特别的简单,就是客户端向服务器发出一条HTTP 请求,服务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理就可以了。(一般网络请求都要在子线程中进行,否则可能会导致页面卡顿情况)


//1.连接网络的Api : URL类。



try {
            URL url = new URL("http://www.itheima.com/images_new/logo.jpg");


//http://www.itheima.com/images_new/logo.jpg --由于这里使用的是http协议去获得连接,所以获得的是
//HttpURLConnection的一个实例。
//2.建立一个连接 --- Connection 对象
   HttpURLConnection conn = (HttpURLConnection)url.openConnection();


//连接网络的时候,有很多 不确定性...
//为了提供用户的感受,会设置一个连接超时的时间
   conn.setConnectTimeout(5000);


//3.设置请求的方式,注意要使用大写的GET,POST.
   conn.setRequestMethod("GET");


//拿到 返回的数据的类型
   String contentType = conn.getContentType();


//返回数据的长度
   int length = conn.getContentLength();


//拿到其他响应的消息头信息,根据key获取对应的信息.
//获取服务器容器类型,一般为tomcat.
   conn.getHeaderField("Server");


//4.获得服务器返回的状态码,根据状态码去判断是否成功.
   int code = conn.getResponseCode();


//200, 404,500,302,304 ...
            if(code == 200){
//进来 则表示成功的处理了请求,返回了数据.
//获得返回的图片的 流数据
InputStream in = conn.getInputStream();

//如何去解析呢?  --如何解析成一个图片显示.
//这个事儿经常要做,谷歌工程师已经帮咱们提供好了现成的类,可以将一个流数据转换为一个图片
Bitmap bitmap = BitmapFactory.decodeStream(in);//只要这个流是个图片,就可以转换成Bitmap(内存中的图片).
imageView.setImageBitmap(bitmap);
in.close();//关闭流
   }


        } catch (MalformedURLException e) {
            e.printStackTrace();
        }finally{
   if(conn != null){
conn.disconnect();//关闭http连接
   }
}




最后在清单文件中申请网络权限即可。




注意:为了提高用户的感受,不允许一些比较耗时的事儿,直接放在主线程中去做,比如:联网就是不确定性的,比较耗时的操作。


补充:关键点是对返回数据类型以及流 进行相应的解析。



POST提交数据和GET类似,,只需要将HTTP 请求的方法改成POST,并在获取输入流之前把要提交的数据写出即可。注意每条数据都要以键值对的形式存在,数据与数据之间用&符号隔开,比如说我们想要向服务器提交用户名和密码,就可以这样写:


connection.setRequestMethod("POST");
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes("username=admin&password=123456");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值