使用xutils发送POST请求,携带json和图片二进制文件数据获取服务器端返回json数据

接口文档:

换头像
接口 user/change_avatar

发送数据
HTTP Post body(一共2对KEY-VALUE):
json={"uid":"1","sid":"0123456789ABCDEF0123456789ABCDEF","ver":"1","request":{}}
file=图片二进制文件数据

返回数据
{"ret":0,"response":{
    "status":1,
    "url":"http://192.168.1.200:8088/thumb.php?src=984340199_1667541218_1540991412.jpg&t=a&w=112&h=112"
    }
}

遇到的问题:首先在封装二进制请求体参数时,传递参数不足,导致服务器端不识别POST请求。
        HttpUtils http = new HttpUtils();
        RequestParams params = new RequestParams();
        params.addBodyParameter("json", json);
        for (int i = 0; i < files.size(); i++) {
            if (files.get(i) != null) {
                try {
                    params.addBodyParameter("file"+i, new FileInputStream(
                            files.get(i)), files.get(i).length(), files.get(i)
                            .getName(), "application/octet-stream");
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }

  params.addBodyParameter(key, stream, length, fileName, mimeType);

然后在发送POST请求时,使用的是异步方法,导致不能返回服务器返回的值。
        String s = null;
        try {
            // 同步方法,获取服务器端返回的流
            ResponseStream responseStream = http.sendSync(HttpMethod.POST, url,
                    params);
            s = responseStream.readString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return s;

  ResponseStream responseStream = http.sendSync(method, url, params);

 下面附上发送POST请求的完整代码:
    /**
     * 发送POST请求,携带json和多个文件参数得到服务器返回的结果(json格式)
     *
     * @param url 请求地址
     * @param json 请求体中封装的json字符串
     * @param List<File> 上传多个文件
     * @return String 服务器返回的结果
     */
    public static String sendPost(String url, String json, List<File> files) {
        HttpUtils http = new HttpUtils();
        RequestParams params = new RequestParams();
        params.addBodyParameter("json", json);
        if (files.size() == 1) {
            try {
                params.addBodyParameter("file",
                        new FileInputStream(files.get(0)), files.get(0)
                                .length(), files.get(0).getName(),
                        "application/octet-stream");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        } else {
            for (int i = 0; i < files.size(); i++) {
                if (files.get(i) != null) {
                    try {
                        params.addBodyParameter("file" + i,
                                new FileInputStream(files.get(i)), files.get(i)
                                        .length(), files.get(i).getName(),
                                "application/octet-stream");
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        String s = null;
        try {
            // 同步方法,获取服务器端返回的流
            ResponseStream responseStream = http.sendSync(HttpMethod.POST, url,
                    params);
            s = responseStream.readString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return s;
    }
时间: 2024-12-05 01:36:58

使用xutils发送POST请求,携带json和图片二进制文件数据获取服务器端返回json数据的相关文章

使用handler和Message获取xutils发送POST请求从服务器端返回数据

注意:应该在handleMessage中处理从服务器返回的数据.否则会因为线程问题拿不到结果. public class MainActivity extends Activity{ private String responseInfo; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCo

android-async-http开源项目对服务器端返回JSON数据的处理

一.在JavaEE项目中搭建环境 1. 导入相关jar包 2. 搭建相关的包和类 3.类中的方法简单实现 User: 声明以下属性,并实现无参构造器和有参构造器,以及各自的get和set方法 UserDao: UserDaoImpl: JsonServlet: <span style="white-space:pre"> </span>protected void doGet(HttpServletRequest request, HttpServletResp

ajax实现二级联动(服务器端返回json数据)

实现效果为上图 HTML 代码: 1 省份:<select id="province" onchange="getCity();"> 2 <option >请选择--</option> 3 </select> 4 城市:<select id="city"> 5 <option>请选择--</option> 6 </select> xmlHttp.js

将数据库中查询的结果转换为json, 然后调用接口的方式返回json

调用接口,无非也就是打开链接 读取流 将结果以流的形式输出 将查询结果以json返回,无非就是将查询到的结果转换成jsonObject ============================================================= /***     * 将从数据中取到的结果以json的格式返回     *      * @param response     * @throws IOException     */    @RequestMapping(value =

JSON(二):服务器端和客户端的JSON处理

上面介绍了如何用 JSON表示数据,接下来,我们还要解决如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用 JavaScript 处理 JSON 格式的数据. 先来看看服务器如何输出JSON格式的数据吧. 以 Java 为例,我们将演示将一个Java 对象编码为 JSON 格式的文本.将 String 对象编码为 JSON格式时,只需处理好特殊字符即可.另外,必须用 (") 而非 (') 表示字符串: <span style="font-family:S

Struts2+Jquery实现ajax并返回json类型数据

主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数据 网上看到很多关于Struts2+ajax+jquery+json的例子,但是很多都不完整,也看不明白,主要原因是返回jsno类型数据和原来的返回字符串类型数据不一样,并且网友们实现步骤没有说清楚,让初学的朋友捉摸不透到底该怎么做. 我做了个简单的demo,供网友们学习,最后我会附上链接,可以下载整个de

最最基层的ajax交互代码jquery+java之间的json跨域传递以及java的json代码返回

首先导入jar包 上面的jar包主要是用来将map或list数据转换成json字符串,传递到前台使用. 静态页面的代码:2.html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>ajax</title> 6 <script type="text/javascript" src="js/

生成并返回 json 结果文件

#region 生成并返回 json 结果文件 /// <summary> /// 生成并返回 json 结果文件 /// </summary> /// <param name="json">主内容</param> /// <param name="argus">其它参数</param> /// <param name="flag">标志</param>

jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)

1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @ParentPackage(WapBaseAction.WAP_PACKAGE) //WAP_PACKAGE继承了json-default @Namespace("/") public class ModifyResumeAction extends WapBaseAction {... [emai