Android开发中的几种网络请求方式详解

Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文。

Java.NET包中的HttpURLConnection类

Get方式:

// Get方式请求
public static void requestByGet() throws Exception {
 String path = "http://www.jb51.net/logins.jsp?id=helloworld&pwd=android";
 // 新建一个URL对象
 URL url = new URL(path);
 // 打开一个HttpURLConnection连接
 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
 // 设置连接超时时间
 urlConn.setConnectTimeout(5 * 1000);
 // 开始连接
 urlConn.connect();
 // 判断请求是否成功
 if (urlConn.getResponseCode() == HTTP_200) {
  // 获取返回的数据
  byte[] data = readStream(urlConn.getInputStream());
  Log.i(TAG_GET, "Get方式请求成功,返回数据如下:");
  Log.i(TAG_GET, new String(data, "UTF-8"));
 } else {
  Log.i(TAG_GET, "Get方式请求失败");
 }
 // 关闭连接
 urlConn.disconnect();
} 

Post方式:

// Post方式请求
public static void requestByPost() throws Throwable {
 String path = "http://www.jb51.net/logins.jsp";
 // 请求的参数转换为byte数组
 String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")
   + "&pwd=" + URLEncoder.encode("android", "UTF-8");
 byte[] postData = params.getBytes();
 // 新建一个URL对象
 URL url = new URL(path);
 // 打开一个HttpURLConnection连接
 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
 // 设置连接超时时间
 urlConn.setConnectTimeout(5 * 1000);
 // Post请求必须设置允许输出
 urlConn.setDoOutput(true);
 // Post请求不能使用缓存
 urlConn.setUseCaches(false);
 // 设置为Post请求
 urlConn.setRequestMethod("POST");
 urlConn.setInstanceFollowRedirects(true);
 // 配置请求Content-Type
 urlConn.setRequestProperty("Content-Type",
   "application/x-www-form-urlencode");
 // 开始连接
 urlConn.connect();
 // 发送请求参数
 DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
 dos.write(postData);
 dos.flush();
 dos.close();
 // 判断请求是否成功
 if (urlConn.getResponseCode() == HTTP_200) {
  // 获取返回的数据
  byte[] data = readStream(urlConn.getInputStream());
  Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");
  Log.i(TAG_POST, new String(data, "UTF-8"));
 } else {
  Log.i(TAG_POST, "Post方式请求失败");
 }
}

org.apache.http包中的HttpGet和HttpPost类

Get方式:

// HttpGet方式请求
public static void requestByHttpGet() throws Exception {
 String path = "http://www.jb51.net/logins.jsp?id=helloworld&pwd=android";
 // 新建HttpGet对象
 HttpGet httpGet = new HttpGet(path);
 // 获取HttpClient对象
 HttpClient httpClient = new DefaultHttpClient();
 // 获取HttpResponse实例
 HttpResponse httpResp = httpClient.execute(httpGet);
 // 判断是够请求成功
 if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
  // 获取返回的数据
  String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
  Log.i(TAG_HTTPGET, "HttpGet方式请求成功,返回数据如下:");
  Log.i(TAG_HTTPGET, result);
 } else {
  Log.i(TAG_HTTPGET, "HttpGet方式请求失败");
 }
} 

Post方式:

// HttpPost方式请求
public static void requestByHttpPost() throws Exception {
 String path = "http://www.jb51.net/";
 // 新建HttpPost对象
 HttpPost httpPost = new HttpPost(path);
 // Post参数
 List<NameValuePair> params = new ArrayList<NameValuePair>();
 params.add(new BasicNameValuePair("id", "helloworld"));
 params.add(new BasicNameValuePair("pwd", "android"));
 // 设置字符集
 HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
 // 设置参数实体
 httpPost.setEntity(entity);
 // 获取HttpClient对象
 HttpClient httpClient = new DefaultHttpClient();
 // 获取HttpResponse实例
 HttpResponse httpResp = httpClient.execute(httpPost);
 // 判断是够请求成功
 if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
  // 获取返回的数据
  String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
  Log.i(TAG_HTTPGET, "HttpPost方式请求成功,返回数据如下:");
  Log.i(TAG_HTTPGET, result);
 } else {
  Log.i(TAG_HTTPGET, "HttpPost方式请求失败");
 }
}

以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。完整代码点这里下载:源码下载

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • android 网络请求库volley方法详解

    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列       RequestQueue queue = Volley.newRequestQueue(this); 2.创建请求对象(3种) StringRequest request = new StringRequest("请求方法","请求的网络地址","成功的网

  • Android HTTP网络请求的异步实现

    前言 大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理.所有网络数据发送,数据接收都有某几个类来实现,外部其它模块只要调用和处理回调函数即可.外部模块和网络模块之间的调用关系可以用如下图表示: 调用端只要创建Request对象,设置参数,发起请求,即可.最后结果通过回调函数返回.右边的异步任务,HttpClient创建,参数解析,错误处理全部交给网络处理模块来完成.由此来看,这个网络模块其实是重复性很高的开发工作

  • Android最基本的异步网络请求框架

    本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关知识.由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家. 1. 同步网络请求 以HTTP的GET请求为例,我们来介绍一下Android中一个基本的同步请求框架的实现.直接贴代码: public class HttpUtils { public static byte[] get(String urlString) { HttpURLConnection urlConnec

  • Android网络请求库android-async-http介绍

    Android网络请求库:android-async-http开源框架 之前有一篇描述了客户端请求服务器端的方式-Post的请求方式.今天介绍一个请求服务器的一个开源库-android-async-http库. 1. 概念: 这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果. 2. 特征: (1).处理异步Http请求,并通过匿名内部类处理回调结果 **(2).**Http异步请

  • Android Xutils3网络请求的封装详解及实例代码

     Xutils3网络请求的封装详解 封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出. 使用前先配置xutils3: 1.gradle中添加 compile 'org.xutils:xutils:3.3.40' 2.自定义Application /** * Created by Joe on 2016/9/25. */ public class MyApp extends Application { @Override public void onCreate(

  • Android GZip的使用-开发中网络请求的压缩实例详解

    Android  GZip: gzip是GNUzip的缩写,它是一个GNU自由软件的文件压缩程序. HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术.一般服务器中都安装有这个功能模块的,服务器端不需做改动. 当浏览器支持gzip 格式的时候, 服务器端会传输gzip格式的数据. 从Http 技术细节上讲,就是 http request 头中 有 "Accept-Encoding", "gzip" ,response 中就有返回头Content-En

  • Android基于OkHttpUtils网络请求的二次封装

    OkHttpUtils网络请求为什么进行二次封装? 1.减少代码量 2.后期换网络处理框架方便 二次封装的实现原理 1.将网络请求提取在一个方法中 2.对里面的可变参数,可以通过参数传递过去,也可以提供一个set方法传递过去 3.对于请求失败和成功,我们可以使用接口回调,让调用该方法的对象处理 封装后的网络处理类的功能 1.网络请求 2.xml数据转换成javaBean 每一个处理网络请求的ListView都要处理的3数据方法 1.初始化数据 2.下拉刷新数据 3.上拉加载数据 封装前的代码 /

  • Android开发中的几种网络请求方式详解

    Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文. Java.NET包中的HttpURLConnection类 Get方式: // Get方式请求 public static void requestByGet() throws Exception { String path = "h

  • VMware WorkStation的三种网络连接方式详解

    一. 首先贴出本人在网络上找到与VMware网络连接相关的知识 安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,其他的未安装(当然也可以手动安装其他的).其中VMnet1是host网卡,用于host方式连接网络的.VMnet8是NAT网卡,用于NAT方式连接网络的.它们的IP地址是随机生成的,如果要用虚拟机做实验的话,最好将VMnet1到VMnet8的IP地址改掉.习惯上把VMware虚拟网卡使用的网段"固定",使用如下原则:VMnet1对应的网段是192.168.

  • 基于JAVA中的四种JSON解析方式详解

    我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 2.GSON 3.FastJSON 4.jackson JSON操作涉及到的类: public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id;

  • Flutter Http网络请求实现详解

    Http网络请求是一门开发语言里比较常用和重要的功能,主要用于资源访问.接口数据请求和提交.上传下载文件等等操作,Http请求方式主要有:GET.POST.HEAD.PUT.DELETE.TRACE.CONNECT.OPTIONS.本文主要GET和POST这两种常用请求在Flutter中的用法,其中对POST将进行着重讲解.Flutter的Http网络请求的实现主要分为三种:io.dart里的HttpClient实现.Dart原生http请求库实现.第三方库实现.后面将会给大家详细讲解这几种区别

  • Android Studio 中运行 groovy 程序的方法图文详解

    Groovy简介 Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码.由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库. Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言.使用该种语言不必编写过多的代码,同时又具有闭包和动态语

  • python爬虫系列网络请求案例详解

    学习了之前的基础和爬虫基础之后,我们要开始学习网络请求了. 先来看看urllib urllib的介绍 urllib是Python自带的标准库中用于网络请求的库,无需安装,直接引用即可. 主要用来做爬虫开发,API数据获取和测试中使用. urllib库的四大模块: urllib.request: 用于打开和读取url urllib.error : 包含提出的例外,urllib.request urllib.parse:用于解析url urllib.robotparser:用于解析robots.tx

  • php curl发起get与post网络请求案例详解

    curl介绍 curl是一个开源的网络链接库,支持http, https, ftp, gopher, telnet, dict, file, and ldap 协议.之前均益介绍了python版本的pycurl https://www.jb51.net/article/221508.htm ,现在介绍怎么使用php版本的URL. curl get请求 function curl_get($url){ $header = array( 'Accept: application/json', );

  • Android开发使用RecyclerView添加点击事件实例详解

    目录 引言 一.RecyclerView基本使用 1. 添加适配器Adapter 2. 创建列表的每个项的item_layout.xml文件 3. 在activity中使用 二.RecyclerView点击事件详细步骤 1. 在RecyclerView对应的Adapter类里面新建接口 2. 在Adapter类里创建setOnItemClickListener方法 3. 在Adapter类的onBindViewHolder里给每个item设置回调 4. 在RecyclerView对应的Activ

  • Android MotionEvent中getX()和getRawX()的区别实例详解

    Android MotionEvent中getX()和getRawX()的区别实例详解 实例代码: public class Res extends Activity implements View.OnTouchListener { Button btn = null; int x = 0; int y = 0; int rawx = 0; int rawy = 0; @Override public void onCreate(Bundle savedInstanceState) { sup

  • 基于开发中使用UEditor编辑器的注意事项详解

    最近在一个刚结束的一个项目中使用到了UEditor编辑器,下面总结一下遇到的问题以及使用时需要注意的地方: 1. 使用UEditor插件需要先对其进行路径配置: 在ueditor.config.js文件中 配置 ueditor.config.js文件相对Ueditor文件夹的位置: 2. UEditor的图片上传功能: 此功能需将插件部署至服务器时才可生效: 3. UEditor报错"Cannot set property 'innerHTML' of undefined": 错误的原

随机推荐