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

来源:互联网 发布:kovsh.mac 编辑:程序博客网 时间:2024/05/22 08:15

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-TypeurlConnect.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 blocke.printStackTrace();}                    }}); }} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();Log.i("error", e.toString());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();Log.i("error", e.toString());} catch (Exception e) {// TODO Auto-generated catch blocke.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 0
原创粉丝点击