首页 > 解决方案 > 齐射在同一个键上发送多个图像

问题描述

@Override
protected Map<String, String> getParams() throws AuthFailureError {
   Map<String, String> params = new HashMap<String, String>();
   params.put("param", textcontent);
   return params;
}

@Override
protected Map<String, DataPart> getByteData() throws AuthFailureError {
   Map<String, DataPart> params = new HashMap<String, DataPart>();
   params.put("imgs", new DataPart(id + ".jpg", getFileDataFromBitmap(selectImg[0]), "image/jpeg"));
   return params;
}

我想用同一个键“imgs”将多个图像发送到服务器,所以,我试试这个代码

   params.put("imgs", new DataPart(id + ".jpg", getFileDataFromBitmap(selectImg[0]), "image/jpeg"));
   params.put("imgs", new DataPart(id + ".jpg", getFileDataFromBitmap(selectImg[1]), "image/jpeg"));
   params.put("imgs", new DataPart(id + ".jpg", getFileDataFromBitmap(selectImg[2]), "image/jpeg"));

但是,它只是最后一次发送图像..

那么,我怎样才能发送这样的图像?

imgs.put(selectImg[0]);
imgs.put(selectImg[1]);
imgs.put(selectImg[2]);
params.put("imgs", imgs);

我的 multipartrequest 类代码在这里。(修改arraylist后,错误返回类型getByteData())

@Override
public byte[] getBody() throws AuthFailureError {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(bos);

    try {
        // populate text payload
        Map<String, String> params = getParams();
        if (params != null && params.size() > 0) {
            textParse(dos, params, getParamsEncoding());
        }

        // populate data byte payload
        Map<String, DataPart> data = getByteData();
        if (data != null && data.size() > 0) {
            dataParse(dos, data);
        }

        // close multipart form data after text and file data
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

        return bos.toByteArray();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

标签: androidandroid-volley

解决方案


HashMap是键值对的集合。在您的情况下,您使用相同的键添加三个不同的值。因此最后添加了一个覆盖以前的值。

创建一个ArrayList值(在您的情况下为图像)并将其用作键的值。

ArrayList<DataPart> dataPart = new ArrayList<>();

dataPart.add(DATA-PART-1);
dataPart.add(DATA-PART-2);
dataPart.add(DATA-PART-3);

Map<String, ArrayList<DataPart>> imageList = new HashMap<>();

imageList.put(KEY, dataPart);

推荐阅读