Android 用HttpURLConnection访问网络的方法
一、HttpURLConnection以GET方式访问网络:
HttpURLConnectionconnection=null; try{ URLurl=newURL("https://www.xxx.com/"); connection=(HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET");//设置访问方式为“GET” connection.setConnectTimeout(8000);//设置连接服务器超时时间为8秒 connection.setReadTimeout(8000);//设置读取服务器数据超时时间为8秒 if(HttpURLConnection.HTTP_OK==connection.getResponseCode()){ //从服务器获取响应并把响应数据转为字符串打印 InputStreamin=connection.getInputStream(); BufferedReaderreader=newBufferedReader(newInputStreamReader(in)); StringBuilderresponse=newStringBuilder(); Stringline; while(null!=(line=reader.readLine())){ response.append(line); } Log.d(TAG,response.toString()); } }catch(Exceptione){ e.printStackTrace(); }finally{ if(null!=connection){ connection.disconnect(); } }
二、HttpURLConnection以POST方式访问网络:
HttpURLConnectionconnection=null; try{ URLurl=newURL("https://www.xxx.com/"); connection=(HttpURLConnection)url.openConnection(); connection.setRequestMethod("POST"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); connection.setDoOutput(true);//使用URL连接进行输出 connection.setDoInput(true);//使用URL连接进行输入 connection.setUseCaches(false);//忽略缓存 //建立输出流,并写入数据 OutputStreamoutputStream=connection.getOutputStream(); DataOutputStreamdataOutputStream=newDataOutputStream(outputStream); dataOutputStream.writeBytes("username=admin&password=888888"); dataOutputStream.close(); if(HttpURLConnection.HTTP_OK==connection.getResponseCode()){ //当正确响应时处理数据 StringBufferresponse=newStringBuffer(); Stringline; BufferedReaderresponseReader= newBufferedReader(newInputStreamReader(connection.getInputStream(),"utf-8")); //处理响应流,必须与服务器响应流输出的编码一致 while(null!=(line=responseReader.readLine())){ response.append(line); } responseReader.close(); Log.d(TAG,response.toString()); } }catch(Exceptione){ e.printStackTrace(); }finally{ if(null!=connection){ connection.disconnect(); } }
注意:
1.HTTP访问是不允许在主线程进行的,否则会报错。因此上面的操作应该在新线程中进行。
2.一般要用HttpURLConnection.getResponseCode()==200来判断是否正常响应。为true则正常响应。
3.在Android2.2及以下版本,使用的是HttpClient,Android2.3及以上版本,使用的是HttpURLConnection,而Android5.1之后废弃了HttpClient的相关Api。因此HttpClient用法不再进行研究。
4.以POST方式提交数据时,每条数据要以键值对的方式提交,各条数据之间以&隔开。比如上面的代码中dataOutputStream.writeBytes(“username=admin&password=888888”);
5.上面用到了StringBuilder和StringBuffer,没有什么特别用意,只是顺便用下。StringBuilder在单线程下比StringBuffer更高效,但不是线程安全的。
以上这篇Android用HttpURLConnection访问网络的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。