HTTP通信
使用HttpUrlConnetion类进行数据的接收和发送。传输时有两种方法可以选择:GET和POST
(1)使用GET方法,需要6个步骤
1.新建URL
-----URL url=new URL(http://192.0.1:8080/index.jsp?id=123456);
2.得到HttpURLConnection连接对象
------HttpURLConnection connection=(HttpURLConnection)url.openConnection();
3.设置该连接对象
----允许读取; URLConnetion.setDoInput(boolean value);
----允许写入;URLConnection.setDoOutput(boolean value);;
----设置请求方法;URLConnection.setRequestMethod("GET") throws ProtocolException;
----设置超时时间;URLConnetion.setConnetionTimeout(int timeout);
----设置是否允许使用缓存;URLConnetion.setUseCaches(boolean value);
4.得到输入流
----URLConnetion.getInputStream() throws Exception;
5.从流中读取返回的结果,进行处理
----推荐BufferReader的readLine()方法
6.关闭流
-----调用close()方法
(2)使用POST方法:与GET方法不同的是,它的参数不能直接写在URL中,而是在HTTP的包体中,参数的实现通过OutputSteam写数据,其他大同小异
使用步骤:
1.新建URL对象
2.获得HttpURLConnection连接对象
3.设置连接对象,设置请求方式为POST
----HttpURLConnetion.setRequestMethod("POST");
----HttpURLConnetion.setUseCaches(false);//POST方法不可以使用缓存!!!!
4.获得输出流,写入数据
----URLConnection.getOutputStream() throws IOException
//希尔数据时,记得要对数据进行编码
----URLConnection.encode(String s,String enc) throws UnsuppoertedEncodingException//两个参数,第一个是要输入的内容,第二个是编码方式
5.获得输入流,读取返回的数据
6.关闭流
实例:(1-1)新建项目HttpURLConnection,在HttpURLConnectionActivity.java中添加如下代码请求网络数据
try{
//创建HttpURLConnection实例对象
URL url=new URL("http://www.renren.com/");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//获得输入流
InputStreamReader in=new InputStreamReader(coon.getInputStream());
//为输入创建BufferReader
BufferReader buffer=new BufferReader(in);
String inputLine=null;
String resultData=null;
//使用循环读取数据
while((inputLine=buffer.readLine())!=null){
resultData+=inputLine()+"/n";
}
//关闭输入流
in.close();
//关闭HTTP连接
conn.disconnect();
//输出数据信息
System.out.priontln(resultData);
}catch(IOException e){
}
(1-2)在onCeate()方法中添加如下代码,防止抛出NetwortOnMainThreadException异常
//设置线程政策
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskWrites()
.detectDiskReaders()
.detectNetwork()
.penaltyLog()
.build());
//设置虚拟内存政策
StrictMode.setVmPolicy(new StrickMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
(1-3)在AndroidMenifest.xml文件中添加用户权限,运行应用程序访问网络
<uses-permission:name="android.permission.INTERNET"/>
(1-4)运行程序:在logcat可以查看到人人网的数据