Android_04_HttpURLConnection使用总结
2015-10-18 21:32
615 查看
前言:
HttpURLConnection的使用步骤如下:
1>获取HttpURLConnection对象,如:
2>设置HTTP请求所使用的方法,如:
注:
HTTP请求常用的方法有两个:GET和POST
GET通常用于请求服务器发送某个资源;
POST通常用来向服务器输入数据;
关于HTTP更多的知识点,可参考《HTTP权威指南》
3>设置请求参数,如:
4>获取服务器端的响应信息
5>断开连接
代码示例如下:
MainActivity.java
activity_main.xml:
运行结果如下:
总结:
1>
在AndroidManifest.xml中记得添加以下网络权限:
2>
超时的时间设置长一点,因为有时受网络因素及其自身还需读取数据的缘故,会消耗一些时间;
3>
如果要提交数据到服务器,只需把HTTP请求的方法改为POST,并在获取输入流之前把要提交的数据写出即可;
注意,每条数据都要以键值对的形式存在,数据与数据之间用 & 符号隔开,比如我们想要向服务器提交用户名
和密码,就可以这样写:
4>
这部分代码有些地方还可以进一步优化,为了更通俗易懂一些,重点就放在了HttpURLConnection上,
有兴趣可自行琢磨一下,也可参考郭霖的《第一行代码Android》的P404;
源码:
HttpURLConnection使用总结示例源码
HttpURLConnection的使用步骤如下:
1>获取HttpURLConnection对象,如:
URL url = new URL("http://www.baidu.com/"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
2>设置HTTP请求所使用的方法,如:
urlConnection.setRequestMethod("GET");
注:
HTTP请求常用的方法有两个:GET和POST
GET通常用于请求服务器发送某个资源;
POST通常用来向服务器输入数据;
关于HTTP更多的知识点,可参考《HTTP权威指南》
3>设置请求参数,如:
urlConnection.setConnectionTimeout(8000); urlConnection.setReadTimeout(8000);
4>获取服务器端的响应信息
InputStream in = urlConnection.getInputStream();
5>断开连接
urlConnection.disconnect();
代码示例如下:
MainActivity.java
package com.example.administrator.testhttpurlconnection; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity extends AppCompatActivity { private TextView textView; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: /*** * 更新TextView的文本 * **/ textView.setText(msg.obj.toString()); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 获取文本控件 * **/ textView = (TextView) findViewById(R.id.tv); } /** * 发送请求,并获取文本信息显示在textView上; * **/ public void sendRequest(View view){ new Thread(){ @Override public void run() { HttpURLConnection httpURLConnection = null; try { /*** * 获取HttpURLConnection对象 * ***/ URL url = new URL("http://www.baidu.com/"); httpURLConnection = (HttpURLConnection) url.openConnection(); /*** * 设置请求方法 * ***/ httpURLConnection.setRequestMethod("GET"); /*** * 设置连接的参数 * **/ httpURLConnection.setConnectTimeout(8000); httpURLConnection.setReadTimeout(8000); /*** * 接收数据 * **/ InputStream inputStream = httpURLConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuffer response = new StringBuffer(); while ((line = bufferedReader.readLine()) != null){ response.append(line); } /** * 发送消息到Handler去更新TextView * **/ Message message = handler.obtainMessage(); message.what = 1; message.obj = response.toString(); handler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); }finally { if(httpURLConnection != null){ /*** * 断开连接 * **/ httpURLConnection.disconnect(); } } } }.start(); } }
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.administrator.testhttpurlconnection.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="百度一下" android:onClick="sendRequest" /> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv"/> </ScrollView> </LinearLayout>
运行结果如下:
总结:
1>
在AndroidManifest.xml中记得添加以下网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
2>
超时的时间设置长一点,因为有时受网络因素及其自身还需读取数据的缘故,会消耗一些时间;
3>
如果要提交数据到服务器,只需把HTTP请求的方法改为POST,并在获取输入流之前把要提交的数据写出即可;
注意,每条数据都要以键值对的形式存在,数据与数据之间用 & 符号隔开,比如我们想要向服务器提交用户名
和密码,就可以这样写:
urlConnection.setRequest("POST");
DataOutputStream out = new DataOutputStream(urlConnection.getOutputStrem());
out.writeBytes("username=admin&password=123456");
4>
这部分代码有些地方还可以进一步优化,为了更通俗易懂一些,重点就放在了HttpURLConnection上,
有兴趣可自行琢磨一下,也可参考郭霖的《第一行代码Android》的P404;
源码:
HttpURLConnection使用总结示例源码
相关文章推荐
- OSI七层与TCP/IP五层网络架构详解
- Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)
- Java基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)
- 网络图片的获取以及二级缓存策略(Volley框架+内存LruCache+磁盘DiskLruCache)
- 由于权限不足而无法读取配置文件出现的HTTP 500.19解决办法
- Java编写网络爬虫
- Http请求中Content-Type讲解以及在Spring MVC中的应用
- Unity3d之Http通讯GET方法和POST方法
- Unity3d之Http通讯GET方法和POST方法
- 软考(二):网络中的那些事儿
- tcpdump常用命令
- http://www.jb51.net/article/32651.htm
- 从头开始实现神经网络:入门
- HTTP请求的两种方式get和post的区别
- Java基础知识强化之网络编程笔记20:Android网络通信之 Android常用OAuth登录和分享
- error: The requested URL returned error: 403 Forbidden while accessing https://github.com/blah/blah
- 【cisco实验】练习 2.3.8: 配置基本交换机管理
- poj_2396 有上下界的网络流
- HttpClient 版本变化 转载
- TCP/IP 三次握手 四次断开