Android 网络请求方法
来源:互联网 发布:索隆 知乎 编辑:程序博客网 时间:2024/04/27 21:41
在Android应用开发中,我们经常会与服务器交互,获取或上传数据,这就需要用到网络请求,一般情况下是使用HTTP协议去发送和接收网络数据,而HTTP又包括两种通信方式,即:HttpUrlConnection和HttpClient。
代码例子:https://git.oschina.net/ysx_xx/HttpText/tree/master
下面我简单地介绍这两种方式的使用:
首先,要进行网络请求,我们要先给应用添加网络权限,有两种方式添加:
1. 打开AndroidManifest.xml文件,选择permission,点击Add:
选择最后一个UsesPermission:
然后在右边Name选项找到android.permission.INTERNET,保存
然后再选择AndroidManifest.xml选项,就能看到
<uses-permissionandroid:name=”android.permission.INTERNET” />
2.第二种方法其实就是直接在AndroidManifest中添加上面那句话,前提是你熟悉怎么写。-------------------------------------------------------------------------------------------------------------------------------------------------------
好了,下面来讲讲那两种请求方式的使用
1. HttpUrlConnection:
先new一个URL对象并传入网络地址,再调用openConnection()方法获取HttpUrlConnection实例,然后设置HTTP请求的方法(GET/POST),接着设置连接超时、读取超时、消息头等,这个可以根据实际情况编写,之后用getInputStream()方法获取从服务器返回的输入流,并读取内容,最后调用disconnect()方法关闭。
代码:
new Thread(new Runnable() {@Overridepublic void run() {HttpURLConnection connection = null;try {URL url = new URL("http://www.baidu.com/");// 调用URL的openConnection()方法,得到HttpURLConnection的实例connection = (HttpURLConnection) url.openConnection();// 设置HTTP请求方法为GET,一般GET为从服务器获取数据,POST为提交数据给服务器connection.setRequestMethod("GET");// 设置连接超时的毫秒数connection.setConnectTimeout(8000);// 设置读取超时的毫秒数connection.setReadTimeout(8000);// 获取服务器返回的输入流InputStream in = connection.getInputStream();// 对获取到的输入流进行读取BufferedReader reader = new BufferedReader(new InputStreamReader(in));String response = "", line;while ((line = reader.readLine()) != null) {response += line;}//获取成功,发送成功信息Message message = new Message();message.what = SUCCESS;message.obj = response;mHandler.sendMessage(message);} catch (Exception e) {//发送失败信息Message message = new Message();message.what = FAILE;message.obj = "请求失败";mHandler.sendMessage(message);e.printStackTrace();} finally {if (connection != null) {//如果connection为null,则关闭它connection.disconnect();}}}}).start();
运行效果如下:
以上是介绍GET方式,那如果要向服务器提交数据呢?
我们可以把请求方式改为POST,并提交参数
例如:connection.setRequestMethod(“POST”);DataOutputStream out = new DataOutputStream(connection.getOutputStream());out.writeBytes(“username=小熊&password=123456”);
2. 下面来看看HttpClient的用法:
HttpClient是一个接口,我们要先创建一个DefaultHttpClient的实例,再创建一个HttpGet对象并传入网络地址,然后调用HttpClient的execute()方法发送GET请求,最后调用HttpResponse的getStatusLine()的getStatusCode()方法获取服务器返回的状态码,如果为200则说明成功
代码:
new Thread(new Runnable() {@Overridepublic void run() {try {//因为HttpClient是一个接口,所以用DefaultHttpClient()方法创建一个实例HttpClient httpClient = new DefaultHttpClient();//创建HttpGet对象并传入网络地址,并调用HttpClient的execute方法发送GET请求HttpGet httpGet = new HttpGet("http://www.baidu.com");HttpResponse httpResponse = httpClient.execute(httpGet);//先取出服务器返回的状态码,如果是200则说明请求响应成功,这里可以自行判断获得的状态码//是什么来判断是否成功或是什么失败if(httpResponse.getStatusLine().getStatusCode() == 200){//请求响应成功,调用getEntity()方法获取HttpEntity实例并转换成字符串HttpEntity entity = httpResponse.getEntity();String response = EntityUtils.toString(entity, "utf-8");//获取成功,发送成功信息Message message = new Message();message.what = SUCCESS;message.obj = response;mHandler.sendMessage(message);}} catch (Exception e) {//发送失败信息Message message = new Message();message.what = FAILE;message.obj = "请求失败";mHandler.sendMessage(message);e.printStackTrace();}}}).start();
运行效果跟HttpURLConnection一样,这里就不多发一遍了。下面是HttpClient的POST方式:
关键代码:
HttpPost httpPost = new HttpPost("http://www.baidu.com");List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("username", "小熊"));params.add(new BasicNameValuePair("password", "123456"));UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");httpPost.setEntity(entity);httpClient.execute(httpPost);
完整代码:
HttpURLConnectionText.java:
public class HttpURLConnectionText extends Activity implements OnClickListener {private final static int SUCCESS = 1;private final static int FAILE = 0;private TextView result;private Button send;private LoadingDialog loadingDialog;private Context mContext;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();}private void initData() {mContext = this;result = (TextView) findViewById(R.id.result);send = (Button) findViewById(R.id.send);send.setOnClickListener(this);}private Handler mHandler = new Handler() {public void handleMessage(Message msg) {String response;if(loadingDialog != null && loadingDialog.isShowing()){loadingDialog.dismiss();}switch (msg.what) {case SUCCESS:response = msg.obj.toString();result.setText(response);break;case FAILE:response = msg.obj.toString();result.setText(response);break;}};};@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.send:loadingDialog = new LoadingDialog(mContext);loadingDialog.setCancel(false);loadingDialog.show();startSend();break;}}private void startSend() {new Thread(new Runnable() {@Overridepublic void run() {HttpURLConnection connection = null;try {URL url = new URL("http://www.baidu.com/");// 调用URL的openConnection()方法,得到HttpURLConnection的实例connection = (HttpURLConnection) url.openConnection();// 设置HTTP请求方法为GET,一般GET为从服务器获取数据,POST为提交数据给服务器connection.setRequestMethod("GET");// 设置连接超时的毫秒数connection.setConnectTimeout(8000);// 设置读取超时的毫秒数connection.setReadTimeout(8000);// 获取服务器返回的输入流InputStream in = connection.getInputStream();// 对获取到的输入流进行读取BufferedReader reader = new BufferedReader(new InputStreamReader(in));String response = "", line;while ((line = reader.readLine()) != null) {response += line;}//获取成功,发送成功信息Message message = new Message();message.what = SUCCESS;message.obj = response;mHandler.sendMessage(message);} catch (Exception e) {//发送失败信息Message message = new Message();message.what = FAILE;message.obj = "请求失败";mHandler.sendMessage(message);e.printStackTrace();} finally {if (connection != null) {//如果connection为null,则关闭它connection.disconnect();}}}}).start();}}
HttpClientText.java:
public class HttpClientText extends Activity implements OnClickListener {private final static int SUCCESS = 1;private final static int FAILE = 0;private TextView result;private Button send;private LoadingDialog loadingDialog;private Context mContext;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();}private void initData() {mContext = this;result = (TextView) findViewById(R.id.result);send = (Button) findViewById(R.id.send);send.setOnClickListener(this);}private Handler mHandler = new Handler() {public void handleMessage(Message msg) {String response;if(loadingDialog != null && loadingDialog.isShowing()){loadingDialog.dismiss();}switch (msg.what) {case SUCCESS:response = msg.obj.toString();result.setText(response);break;case FAILE:response = msg.obj.toString();result.setText(response);break;}};};@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.send:loadingDialog = new LoadingDialog(mContext);loadingDialog.setCancel(false);loadingDialog.show();startSend();break;}}private void startSend() {new Thread(new Runnable() {@Overridepublic void run() {try {//因为HttpClient是一个接口,所以用DefaultHttpClient()方法创建一个实例HttpClient httpClient = new DefaultHttpClient();//创建HttpGet对象并传入网络地址,并调用HttpClient的execute方法发送GET请求HttpGet httpGet = new HttpGet("http://www.baidu.com");HttpResponse httpResponse = httpClient.execute(httpGet);//先取出服务器返回的状态码,如果是200则说明请求响应成功,这里可以自行判断获得的状态码//是什么来判断是否成功或是什么失败if(httpResponse.getStatusLine().getStatusCode() == 200){//请求响应成功,调用getEntity()方法获取HttpEntity实例并转换成字符串HttpEntity entity = httpResponse.getEntity();String response = EntityUtils.toString(entity, "utf-8");//获取成功,发送成功信息Message message = new Message();message.what = SUCCESS;message.obj = response;mHandler.sendMessage(message);}} catch (Exception e) {//发送失败信息Message message = new Message();message.what = FAILE;message.obj = "请求失败";mHandler.sendMessage(message);e.printStackTrace();}}}).start();}}
欢迎关注小熊公众号哦^_^同步更新...
微信号:smile_klxx
- Android 网络请求方法
- Android AsyncHttpResponseHandler异步网络请求方法
- Android AsyncHttpResponseHandler异步网络请求方法
- 网络请求方法
- AFNetworking网络请求方法
- android开发网络请求的几种方法
- Android使用Httpclient网络请求,get,post方法
- Android OkHttp及http、https网络请求方法
- android请求网络
- android 网络请求代理
- android网络请求连接
- Android学习--网络请求
- Android 网络请求方式
- android网络请求
- android网络请求
- android网络请求
- android 网络请求 http
- Android网络请求实例
- Java自定义协议报文封装 添加Crc32校验
- 内联函数和宏定义的区别
- 4.30
- xUtils开源库导入AS失败,换成导入xUtils3开源库
- HTML5移动端meta标签中viewpoint简介
- Android 网络请求方法
- [LeetCode]Next Permutation下一个排列问题
- 基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
- POJ 1201 差分约束系统
- 安卓动态调试七种武器之长生剑 - Smali Instrumentation
- Java EE 之Hibernate初步接触 one-to-many
- JSON.stringify的使用
- Lab 3:自行车码表
- PAT-B 1030. 完美数列