Volley框架的几种post提交请求方式

volley_okhttp_retrofit三种请求方式的基本用法 立即下载
首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如 下载 文件等,Volley的表现就不尽如人意。

在app开发中,我们最常见的就是从app客户端向服务端发一个http请求.对于两种基本的web请求方式get和post来说,get请求方式相对比较简单,在此略过不表.本文重点描述一下通过volley进行几种post提交的方式.

1.客户端以普通的post方式进行提交,服务端返回字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
StringRequest stringRequest = new StringRequest(Request.Method.POST,httpurl,
     new Response.Listener<string>() {
         @Override
         public void onResponse(String response) {
             Log.d(TAG, "response -> " + response);
         }
     }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
             Log.e(TAG, error.getMessage(), error);
         }
     }) {
     @Override
     protected Map<string, string= "" > getParams() {
         //在这里设置需要post的参数
               Map<string, string= "" > map = new HashMap<string, string= "" >(); 
             map.put( "name1" , "value1" ); 
             map.put( "name2" , "value2" ); 
 
           return params;
     }
};       
 
requestQueue.add(stringRequest);</string,></string,></string,></string>
2.客户端以json串的post请求方式进行提交,服务端返回json串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
Map<string, string= "" > map = new HashMap<string, string= "" >(); 
map.put( "name1" , "value1" ); 
map.put( "name2" , "value2" ); 
 
JSONObject jsonObject = new JSONObject(params);
JsonRequest<jsonobject> jsonRequest = new JsonObjectRequest(Method.POST,httpurl, jsonObject,
     new Response.Listener<jsonobject>() {
         @Override
         public void onResponse(JSONObject response) {
             Log.d(TAG, "response -> " + response.toString());
 
         }
     }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
             Log.e(TAG, error.getMessage(), error);
     }
     })
     {
     //注意此处override的getParams()方法,在此处设置post需要提交的参数根本不起作用
     //必须象上面那样,构成JSONObject当做实参传入JsonObjectRequest对象里
     //所以这个方法在此处是不需要的
//    @Override
//    protected Map<string, string=""> getParams() {               
//          Map<string, string=""> map = new HashMap<string, string="">(); 
//            map.put("name1", "value1"); 
//            map.put("name2", "value2"); 
                 
//        return params;
//    }
             
     @Override
     public Map<string, string= "" > getHeaders() {
         HashMap<string, string= "" > headers = new HashMap<string, string= "" >();
         headers.put( "Accept" , "application/json" );
         headers.put( "Content-Type" , "application/json; charset=UTF-8" );
                 
         return headers;
     }
};
requestQueue.add(jsonRequest);</string,></string,></string,></string,></string,></string,></jsonobject></jsonobject></string,></string,>
看了上面这段代码,会觉得volley这个框架实在是还不够完善,使用JsonObjectRequest对象提交一个post请求,如果有参数需要提交,就必须以JSONObject的json串方式提交.
如果服务端并不支持这种方式呢?比如常见的spring m vc 服务端,就很难支持json的请求方式.
那么我们想实现这个目标,就需要使用下面给出的办法.

3.客户端以普通的post方式进行提交,服务端返回json串
首先在Activity类里,继承Request实现一个NormalPostRequest类
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private class NormalPostRequest extends Request<jsonobject> {
     private Map<string, string= "" > mMap;
     private Listener<jsonobject> mListener;
 
     public NormalPostRequest(String url, Listener<jsonobject> listener,ErrorListener errorListener, Map<string, string= "" > map) {
         super (Request.Method.POST, url, errorListener);
             
         mListener = listener;
         mMap = map;
     }
     
     //mMap是已经按照前面的方式,设置了参数的实例
     @Override
     protected Map<string, string= "" > getParams() throws AuthFailureError {
         return mMap;
     }
     
     //此处因为response返回值需要json数据,和JsonObjectRequest类一样即可
     @Override
     protected Response<jsonobject> parseNetworkResponse(NetworkResponse response) {
         try {
             String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
                 
             return Response.success( new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));
         } catch (UnsupportedEncodingException e) {
             return Response.error( new ParseError(e));
         } catch (JSONException je) {
             return Response.error( new ParseError(je));
         }
     }
 
     @Override
     protected void deliverResponse(JSONObject response) {
         mListener.onResponse(response);
     }
}</jsonobject></string,></string,></jsonobject></jsonobject></string,></jsonobject>
接下来的调用方式和前面差不多,生成一个Request实例,加入队列中即可.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
 
Request<jsonobject> request = new NormalPostRequest(httpurl,
     new Response.Listener<jsonobject>() {
         @Override
         public void onResponse(JSONObject response) {
             Log.d(TAG, "response -> " + response.toString());
         }
     }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
             Log.e(TAG, error.getMessage(), error);
         }
     }, params);
 
requestQueue.add(request);</jsonobject></jsonobject>
以上代码在android 4.3环境下测试通过.
Volley使用,包含get、post请求,获取String/JsonObject/JsonArray数据(android客户端+java服务器端) andriod Volley的HTTP网络通信,包含get、post请求,获取String/JsonObject/JsonArray数据(android客户端+java服务器端) 立即下载

相关推荐

volley 通过表单提交数据

volley 实现表单提交数据,volley 封装表单数据

android vollery post图片上传,如何在Android中使用Volley发送“multipart/form-data”POST

我可能是错了这一点,但我认为你需要实现自己的com.android.volley.toolbox.HttpStack为此,因为默认的(HurlStack如果版本> Gingerbread或HttpClientStack)不处理multipart / form-data 。编辑:确实我错了。我能够使用MultipartEntity在请求这样做:public class MultipartReq...

weixin_39907220的博客 271

COMSOL求解器实战:如何避免非线性问题求解失败(附牛顿法调试技巧)

本文深入探讨了COMSOL求解器在处理非线性问题时常见的失败原因及解决方案。通过分析物理模型非线性特性、初始条件敏感性和求解器参数配置,提供了牛顿法调试的黄金四步法,包括模型检查、分阶段求解、参数调优和高级诊断工具应用。特别针对材料非线性、几何非线性和多物理场耦合等典型工程场景,给出了实战技巧和预防性建模策略,帮助工程师有效避免求解失败。

weixin_29284657的博客 418

Android Volley框架的几种post提交请求方式[转]

1.客户端以普通的post方式进行提交,服务端返回字符串 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

里脊土豆片的大炒锅 1116

ESP32之 ESP-IDF + Clion 开发环境搭建(二)—— Linux版

本文介绍了 Linux 下,使用Clion IDE 用官方 ESP-IDF 开发包进行 ESP32 开发的环境搭建

Augtons 的博客 6097

手把手教你学Simulink--巴特沃斯滤波器设计与实现仿真

巴特沃斯滤波器的设计目标是拥有尽可能平滑的通带响应,这意味着在通带内信号衰减最小且没有波动。这种类型的滤波器非常适合用于音频处理、生物医学信号处理以及其他需要高保真度的应用场景。根据应用需求的不同,可以选择低通、高通、带通或带阻滤波器。明确你的系统需求,如输入信号类型(正弦波、方波等)、滤波器类型(低通、高通、带通或带阻)、截止频率、滤波器阶数等。假设我们需要设计一个4阶低通巴特沃斯滤波器,其截止频率为1kHz,用来过滤掉高于1kHz的所有频率成分。

MHD0815的博客 450

使用HttpURLConnection上传文件

根据HTTP规范,如果Form表单需要进行文件上传,enctype=“multipart/form-data”是必须设置的;注意上图中HTTP请求的Header区域有个Content-Type属性,其值为“multipart/form-data; boundary=----WebKitFormBoundaryJlHgWOswYf7CHgjV”,分号前面即表单enctype的属性值,表示本次请求有文件需要上传;而分号后面是一个boundary属性,其值为“----WebKitFormBoundaryJlHgW

竹叶青的专栏 9151

【AUTOSAR-DCM】-3.1-将CDD导入CFG并查看$22服务配置变化(UDS诊断DID带一个Data)

案例背景:(共8页精讲) 在《【UDS诊断描述文件CDD】-3.2-编辑CDD给$22服务创建一个带一个Data的DID(dataIdentifier)数据标识符》中,适应使用CANdela Studio在CDD中创建一个带一个Data的DID(dataIdentifier)数据标识符,见图0-1。现在我们将该CDD文件导入到CFG(DaVinci Configurator),看看配置会发生哪些变化。 图0-1 目录 1 将诊断描述文件CDD导入CFG(DaVinci Configurator.

「汽车电子助手」的博客 1632

Volley请求的简单封装,以及applicaation/json数据请求

这几个月接触了几个项目,对于网络这一块都需要进行会话的保持,这样做也有很多好处,比如说请求的时候我们可以不用携带用户相关的敏感数据而服务端就能够识别,这里涉及到session和cookie相关不做介绍. 1.第一个,继承request,自定义一个request 在这里我们需要关注的主要有两个方法. 第一个是parseNetworkResponse,显而易见的这里我们需要将网络返回的二进制数据

no21_boy的博客 859

【华为OD机试】真题A卷-Linux发行版的数量(Python)

【华为OD机试】真题A卷-Linux发行版的数量(Python):Linux操作系统有多个发行版,distrowatch.com提供了各个发行版的资料。这些发行版互相存在关联,例如Ubuntu基于Debian开发,而Mint又基于Ubuntu开发,那么我们认为Mint同Debian也存在关联。 发行版集是一个或多个相关存在关联的操作系统发行版,集合内不包含没有关联的发行版。给你一个nxn的矩阵isConnected,其中isConnected[i][i]=1表示第i个发行版和第j个发行版直接

u014481728的博客 942

第10章 shellcode实战:18 神级开源shellcode工具:donut

Donut是一款shellcode生成器,可将C/C++、C#生成的PE文件转换为shellcode文件,同时支持JS、XSL、VBS脚本转换为shellcode。以下“原生”EXE/DLL指非托管PE文件(包括并不限于C/C++、delphie等编写生成的可执行文件),可以直接由系统加载运行,区别于.Net生成的托管文件。被处理exe/dll为32位程序,则需要用32为的shellcode加载器启用,exe/dll为64位的就用64位shellcode加载器启用。

李小咖·网安技术库 2796

Android Volley框架的几种post提交请求方式

转:http://www.open-open.com/lib/view/open1407727047207.html 首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Volley的表现就不尽如人意。 在app开发中,我们最常见的就是从app客

灵思致远Leansmall的博客 1172

C#串口通信从入门到精通(11)——串口接收的数据存储到本地文件(txt、csv)

本文详细介绍如何将串口通信将数据进行本次存储,主要介绍常用的csv、txt格式文件,由多年实战经验总结,绝对干货!

qq_34059233的博客 7237

Android:Volley框架的几种post提交请求方式

首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Volley的表现就不尽如人意。 在app开发中,我们最常见的就是从app客户端向服务端发一个http请求.对于两种基本的web请求方式get和post来说,get请求方式相对比较简单,在此略过不表.

HMYANG314的专栏 1331

2.2 保姆级教程:手把手带你构建第一个 LangGraph 应用

本文是一份保姆级教程,手把手教你构建第一个LangGraph应用——"智能工具助手"Agent。教程分为8个步骤:从环境准备到工具定义(使用Tavily搜索API和自定义计算器),再到定义图状态、创建决策节点和执行节点,最后连接工作流并编译运行。通过这个项目,你将学会如何让Agent智能选择工具(搜索或计算),掌握LangGraph开发的基本流程,为构建更复杂系统打下基础。关键点包括状态管理、节点设计和条件路由的实现。

yonggeit的博客 3116

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: JSON 之FastJson解析
下一篇: 解决安装使用Genymotion过程出现的一些问题
kursh_pong
博客等级 码龄13年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值