Android Volley网络请求框架 实现post方法并带Map参数上传

安卓常用网络请求框架XUtils、OkHttp、Volley,基于h5框架的移动app开发 3.Volley Volley是Google官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持HttpClient、HttpUrlConnection, 甚至支持OkHttp,而且Volley里面也封装了ImageLoader,所以如果你愿意你甚至不需要使用图片加载框架,不过这块功能没有一些专门的图片加载框架强大,对于简单的需求可以使用,稍复杂点的需求还是需要用到专门的图片加载框架。Volley也有缺陷,比如不支持post大数据,所以不适合上传文件。不过Volley设计的初衷本身也就是为频繁的、数 阅读详情

本文转载至:http://www.eoeandroid.com/thread-326294-1-1.html

因为自己项目要求,所以研究了一下Volley这套网络请求框架,觉得挺快的,但是发现里面的JsonObjectRequest不能传一个map参数,觉得不太方便,就自己写了一个扩展 的Request,实现post方法带map参数,返回一个jsonObject或者json数组,代码很简单,就是简单地 继承并且实现了parseNetworkResponse这个方法

  JsonObjectPostRequest.java
[mw_shl_code=java,true]package com.example.volleysimple;

import java.io.UnsupportedEncodingException;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;

public  class JsonObjectPostRequest extends Request<JSONObject>{
        private Map<String,String> mMap;
        private Listener<JSONObject>  mListener;


        public JsonObjectPostRequest(String url,Listener<JSONObject> listener, ErrorListener errorListener,Map map) {
                super(Request.Method.POST, url, errorListener);
                mListener=listener;
                mMap=map;
                
        }
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

                return mMap;
        }

           @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);
                
        }

}

这个是返回JsonArray的
JsonArrayPostRequest.java
[mw_shl_code=java,true]package com.example.volleysimple;

import java.io.UnsupportedEncodingException;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.support.v4.util.LruCache;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;

public  class JsonArrayPostRequest extends Request<JSONArray>{
        private Map<String,String> mMap;
        private Listener<JSONArray>  mListener;
        private LruCache lrucache;


        public JsonArrayPostRequest(String url,Listener<JSONArray> listener, ErrorListener errorListener,Map map) {
                super(Request.Method.POST, url, errorListener);
                mListener=listener;
                mMap=map;
                
                // TODO Auto-generated constructor stub
        }
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
                // TODO Auto-generated method stub
                return mMap;
        }

           @Override
            protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
                try {
                    String jsonString =
                        new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                    return Response.success(new JSONArray(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(JSONArray response) {
                mListener.onResponse(response);
                
        }

}

这个是调用的一个简单的例子activity

[mw_shl_code=java,true]package com.example.volleysimple;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.Volley;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
        private TextView mTextView;
        private Map<String,String> mMap;
        private String URL="http://10.0.0.188:58003/QuotationSystem/QuotationSystem/Handler1.ashx";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                mTextView=(TextView) findViewById(R.id.tv_main);
                mMap=new HashMap<String,String>();
                mMap.put("version", "1");
                
                RequestQueue requestQueue=Volley.newRequestQueue(this);
                JsonObjectPostRequest jsonObjectPostRequest=new JsonObjectPostRequest(URL, new Response.Listener<JSONObject>() {

                        @Override
                        public void onResponse(JSONObject response) {
                                mTextView.setText(response.toString());
                                
                        }
                }, new Response.ErrorListener(){

                        @Override
                        public void onErrorResponse(VolleyError error) {
                                Toast.makeText(MainActivity.this, "获取失败", Toast.LENGTH_SHORT).show();
                                
                        }}, mMap);
                requestQueue.add(jsonObjectPostRequest);

        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

}

Android 使用volley上传图片、多张图片 使用volley请求数据很简便,但遇到上传文件就麻烦那可不好,同时使用多个网络请求类库也是不太建议的。所以这里就给出了一种解决方法,也要借助一个jar包,这里用到的是httpmime(点击下载),主要用到的是MultipartEntity类,可以对请求参数进行封装。 主要是继承volley的Request类,然后通过使用httpmim的MultipartEntity类对文件参数进 阅读详情

相关推荐

Volley框架的get和post请求

通过Volley框架,完成数据的get和post请求,可以直接运行、

android okgo 参数map,OkGo 网络请求框架介绍与使用说明

前言使用Android Studio 用户一般来说,只需要添加第一个 okgo 的核心包即可,其余的三个库根据自己的需要选择添加。//必须使用compile 'com.lzy.net:okgo:3.0.4'//以下三个选择添加,okrx和okrx2不能同时使用compile 'com.lzy.net:okrx:1.0.2'compile 'com.lzy.net:okrx2:2.0.2'compi...

weixin_39818631的博客 1299

SHP转TXT、TXT转SHP工具(附工具下载链接)

关于TXT,可以选择整个图层生成一个TXT。也可以勾选“每个地块单独存TXT”,然后选择一个字段,根据字段值,给每个地块生成一个TXT文件。支持选择和数据框一样的坐标系,也可以选择一个图层,工具会采用和这个图层一样的坐标系。1、TXT数据支持输入单个或者多个TXT文件,也可以直接选择TXT所在的文件夹。所有的TXT数据都生成到一个矢量数据图层。关于这一行的内容,可以在地块坐标行设置中进行设置。其他:①面节点闭合:勾选,则回到起点。属性描述:可以直接复制粘贴进来,也可以直接修改。也可以改为任意字母。

坐听风雨 4301

Android okhttp post提交数据的三种方式

【代码】Android okhttp post提交数据的三种方式。

qq_27494201的博客 1841

DDR内存条选购避坑指南:单Rank vs 双Rank性能实测对比(附2024年颗粒推荐)

本文深入解析了内存条中单Rank与双Rank设计的原理与性能差异。通过实战测试对比,揭示了双Rank内存在高负载场景(如3D渲染、视频剪辑)中凭借Rank Interleaving技术带来的显著性能优势,并提供了2024年针对不同用户需求的DDR4/DDR5内存选购策略与避坑指南。

ik678901的博客 1130

5、Raspberry Pi CPU架构与多线程编程详解

本文详细介绍了Raspberry Pi的CPU架构(包括ARMv6Z、ARMv7-A和ARMv8-A),通过/proc/cpuinfo解析硬件信息,并深入探讨了多线程编程的核心技术。内容涵盖pthread库的使用,如线程创建、属性设置、等待与分离、线程同步机制(互斥锁),以及实际应用场景如多媒体处理和网络服务。同时强调了线程安全、死锁预防和资源管理等关键注意事项,帮助开发者在Raspberry Pi上构建高效稳定的多线程应用。

sre5engineer的博客 95

android map封装json数据,android post带数据请求方式,传递的数据格式包括json和map...

如下:public static String httpPost(String url, String json) {try {URL u = new URL(url);HttpURLConnection httpURLConnection = (HttpURLConnection) u.openConnection();httpURLConnection.setConnectTimeout(TI...

weixin_30741527的博客 485

Codex 接入国产大模型完整指南:CC-Switch 与 Codex++ 的工程化选型

Codex 默认走 OpenAI Responses API,而 DeepSeek、GLM、Kimi 等国产模型只提供 OpenAI-compatible 的 Chat Completions——两套协议在消息结构、流式响应、reasoning 字段、tool call 上都不兼容,所以"改个 Base URL + 填国产 Key"这种朴素操作根本跑不通。本文从架构师视角出发,把 Codex 接入国产大模型这件事讲透:先剖析协议链路到底卡在哪,再对比 CC-Switch和 Codex++两套主流方案的差异

少说,多做 3856

Java Post 请求 Map

①. SSLClient.javapackage com;import java.security.cert.CertificateException; import java.security.cert.X509Certificate;import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.n

筱丶新的博客 4773

基于YOLOv11的手写数字与符号识别系统设计与实现

手写数字与符号识别系统需要丰富多样的训练数据才能达到理想的泛化性能。MNIST:包含70,000个手写数字样本(0-9),28x28灰度图像优点:干净整齐,适合初学者缺点:多样性不足,只有数字EMNIST:MNIST的扩展,包含数字、字母(大小写)和特殊符号样本量:814,255张图像覆盖62个类别(10数字+26小写字母+26大写字母)HASYv2:专门的手写符号数据集包含369个不同符号类别约168,000个标注实例包括数学符号、箭头、括号等:英文手写文本数据库。

YOLO 291

Win10 开机突然蓝屏错误代码0xc0000001安全模式也进不了,不用重装系统怎么修复?(已解决)九个解决参考方案

Win 10专业版HP480G7。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 1万+

安卓常用网络请求框架XUtils、OkHttp、Volley

由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。[外链图片转存中…(img-MHelUvmp-1711999528067)][外链图片转存中…(img-0lyEd8bU-1711999528067)][外链图片转存中…(img-5zio26WZ-1711999528068)]

m0_57473261的博客 1231

Open3D点云数据处理(二):读写点云,你真的会吗?

本文详细介绍了open3d加载点云、保存点云的方法,同时打印点云坐标、颜色、法向量等字段信息。

孙悟空 2604

Android最火的框架系列(四)Volley

其实,本来不想写Volley的,由于前面写了一篇如何使用Eclipse搭建Android服务端的博客,今天,我们尝试用Volley去访问一下。其实,Volley已经不算是很火的网络请求框架了,Volley算是一个比较适合新手的网络请求库。Volley现在在Github上仅有2.3k的star,现在用的多的是Retrofit+okhttp。但是,Volley在某些场景下,使用起来还是挺不错...

zhaojun的博客 2万+

AI上推荐 之 AutoRec与Deep Crossing模型(改变神经网络的复杂程度)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 5666

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

安卓常用网络请求框架XUtils、OkHttp、Volley、Retrofit

Override//输入错误时的时间//获取当前时间//成功登陆 跳转} else {//登录失败//线程结束toast(“服务器返回错误”);});//正确返回结束常见问题(1):已经导入最新的包,但是okhttp的Request.Builder().url().buid()的Builder()不存在怎么办?解决:你需要前面加上包名就可以了常见问题(2):运行到response.body().string()一步时抛异常具体的意思就是。

2401_84123005的博客 889

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android之Volley请求与上传

一、Volley请求 直接看代码示例: private LoginModel loginModel; private RequestQueue requestQueue; private StringRequest stringRequest; privateToast toast; toast =Toast.makeText(LoginActivity.this, "", T...

lizhong 549

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android中利用volley同时上传文件和文本参数

Android中利用volley同时上传文件和文本参数 前言 在做项目时利用了Volley网络库与服务器之间进行通信,但Volley并没有现成的上传文件的Request可以调用,网上搜索一圈发现很多都是基于HttpClient进行自定义Request封装,可是无奈android 6.0之后移除了HttpClient的代码,只能自己基于HttpURLConnection封装一个Request使用

Reed_优快云的博客 2742

volley两种网络请求方式

今天简单总结Volley两种网络请求方式(GET与POST) 有Web开发经验的对这两种方法肯定很熟悉,一般来说,要传递数据时推荐用POST,不推荐用GET(GET会暴露出传递的参数),好了废话不说了,直接上代码。 1.GET方式请求  首先设置服务器地址,我这是Tomcat本地服务器. String url = "http://192.168.247.1:8060/Volley/

大啊大前端 601

Android网络异步请求库Volley简介与基本用法

Android网络异步请求库Volley简介与基本用法 一、Volley简介 在开发Android应用的时候不可避免的需要使用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接受网络数据。Android系统中主要提供了两种方式进行HTTP通信,HttpURLConnection和HttpClient(在Android 6.0之后被完全废弃)。 不过HttpURLConnection和H...

weixin_38196407的博客 571

android volley 上传图片 和参数,Android使用Volley实现上传文件功能

一个项目中用到的使用Volley上传头像文件的例子,供大家参考,具体内容如下/*** Created by wangshihui on 2015/11/30.* 上传文件* url:.....method:post参数:file接口给的参数:file 就是表单的key,传给mFilePartName;这是个测试类,测试上传头像没有问题,适合只上传单个文件的场景*/public class Mult...

weixin_32744285的博客 214

Volley框架的基本使用方法

本文为作者(石岩)原创,转载请指明出处: http://blog.youkuaiyun.com/a1002450926/article/details/50412591现在开发app,可以说离不开网络操作,今天给大家介绍一下android网络框架volley的使用方法。volley简介Volley主页 https://android.googlesource.com/platform/frameworks/v...

qq_34317125的博客 535

android volley 上传图片 和参数,android Volley 上传文件上传图片

android volley 实现上传文件功能Volley不解释了吧, android 官方的一个网络请求库.源代码的地址在:git@github.com:com314159/VolleyMultiPartRequest.git上面的是ssh下面的是http地址https://github.com/com314159/VolleyMultiPartRequest是根据https://github....

weixin_29002209的博客 147

Android Volley框架的基本用法

前段时间在项目中要使用网络通信手段,在网上搜索了一下,选择了Volley框架,结合郭神的博客写了一篇自己的博客,总结一下使用Volley的心得。一、Volley简介2013年Google I/O大会上发布一个新的Android网络通讯框架Volley,Volley极大地简化了网络通信的步骤,它设计的目标是用于进行数据量不大但是通信频繁的网络操作,不适用于大数据量的网络通讯(比如下载文件)。二、Vol

Axe_Ishmael 391
上一篇: Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
下一篇: Android中自动跳转到系统设置界面
meng0911
博客等级 码龄15年 15粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值