安卓学习笔记(八)http通信——安卓第五天

http通信用到两种接口。第二种比第一种封装得更加好,两种都行。


和socket不同的是,http只能请求相应,也就是一定要客户端找一下服务器,服务器回一下。而且服务器不管每次找他的是谁,要什么给什么就是了。

1. HttpURLConnection接口

三步走:

第一步:因为必须找一下服务器,服务器才回自己一下,所以先腾个地方给服务器发请求。

暂时还不懂线程那里是怎么回事,暂时就还是用onClick就发一个请求来。


第二步:解决URL

URL  url = new URL(new String("http://......"));


第三步:建立连接

HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
设置一些属性(可选)

urlConn.setDoOutput(true);  
urlConn.setDoInput(true);  
//设置请求方式为POST  
urlConn.setRequestMethod("POST");     //如果是post的话就加这一句 
//POST请求不能使用缓存  
urlConn.setUseCaches(false);  
//关闭连接  
urlConn.disConnection();  

如果是post的话要加这些东西

urlConnect.setConnectTimeout(3000);  // 设置连接超时时间
			urlConnect.setDoOutput(true);  //post请求必须设置允许输出
			urlConnect.setUseCaches(false); //post请求不能使用缓存
			urlConnect.setRequestMethod("POST");  //设置post方式请求
			urlConnect.setInstanceFollowRedirects(true); 
			urlConnect.setRequestProperty("Content-Type","application/x-www-form-urlencode");// 配置请求Content-Type
			urlConnect.connect();  // 开始连接
//下面是送参数过去,因为是post所以不能在URL里写参数
			DataOutputStream dos = new DataOutputStream(urlConnect.getOutputStream()); // 发送请求参数
			dos.write(postData);
			dos.flush();
			dos.close();

第四步:这次步数比较多,再多来一步

接受传回来的数据

if ((x = urlConnect.getResponseCode()) == 200) {    //请求成功
				final byte[] data = readInputStream(urlConnect.getInputStream());   
				
    			txtV_rslt.setText(new String(data, "UTF-8"));
    			txtV_rslt.post(new Runnable() { 
    				 
                    @Override 
                    public void run() { 
                    	try {
							txtV_rslt.setText(new String(data, "UTF-8"));
						} catch (UnsupportedEncodingException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
                    }}); 

			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.i("error", e.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.i("error", e.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.i("error", e.toString());
		}    

其中

    public  byte[] readInputStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while( (len = inStream.read(buffer)) !=-1 ){
            outStream.write(buffer, 0, len);
        }
        byte[] data = outStream.toByteArray();//转化为二进制数据
        outStream.close();
        inStream.close();
        return data;
    }



2. HttpClient接口

还没看。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值