如何在android中从gallery上传多张图片?

如何在android中从gallery上传多张图片?,android,android-volley,retrofit2,Android,Android Volley,Retrofit2,我想上传多个图片从画廊到服务器,但只得到一个图像,而不是多个 下面是它的代码 FirstFragment.java private void orderRequest() { final OrderRequestModel model = basicInfiFragment.getData(); model.setSs(steelFragment.getProductInfo()); model.setAluminium(aluminiumFragment.getPro

我想上传多个图片从画廊到服务器,但只得到一个图像,而不是多个

下面是它的代码

FirstFragment.java

private void orderRequest() {

    final OrderRequestModel model = basicInfiFragment.getData();
    model.setSs(steelFragment.getProductInfo());
    model.setAluminium(aluminiumFragment.getProductInfo());

    SimpleMultiPartRequest orderRequest = new SimpleMultiPartRequest(Request.Method.POST,
            Constance.baseURL + Constance.orderURL, new com.android.volley.Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            DialogUtil.hideProgrss();
            ProductModel mResponse = new Gson().fromJson(response, ProductModel.class);
            if (mResponse.getStatus().equalsIgnoreCase(Constance.success)) {
                Toast.makeText(getContext(), mResponse.getMessage(), Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(getContext(), MainActivity.class);
                getContext().startActivity(intent);
                getActivity().finish();
            } else {
                SnackUtil.mackText(mBinding.layoutRoot, mResponse.getMessage(), true);
            }
            L.e(response);
        }
    }, new com.android.volley.Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            L.e(error.toString());
            DialogUtil.hideProgrss();
            DialogUtil.someThingWentWrong(getContext());
        }
    });

    Map<String, String> headerMap = new HashMap<>();
    headerMap.put("token", SP.getString(SP.TOKEN));



    for (ImageDetails imageDetails : model.getImageList()) {

            orderRequest.addStringParam("json", new Gson().toJson(model));
            orderRequest.addFile("siteImages",imageDetails.getPath());
            orderRequest.addMultipartParam(imageDetails.getName(), getActivity().
                    getContentResolver().getType(imageDetails.getURI()), imageDetails.getPath());
            orderRequest.setHeaders(headerMap);
        }


    DialogUtil.showProgress(getContext());
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(orderRequest);
}
public OrderRequestModel getData() {
    OrderRequestModel model = new OrderRequestModel();
    try {
           model.setImageList(imageDetails);
         } catch (Exception e) {
        SnackUtil.mackText(mBinding.layoutRoot, getString(R.string.some_things_went_wrong), true);
        L.e("date parse Error : " + e.getMessage());
    }
    return model;
}


 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case 122:
            if (data != null) {
                if (resultCode == Activity.RESULT_OK) {
                    Bitmap image = (Bitmap) data.getExtras().get("data");
                    String strData = String.valueOf(data.getData());
                    L.e("Camera : " + strData);
                    if (image != null) {
                        ImageDetails imgDetails = new ImageDetails();
                         imgDetails.setName(MyUtil.getFilename(Uri.parse(strData), getActivity()));
                        imgDetails.setBitmap(image);
                        imgDetails.setName("image" + new Random().nextInt(1000));

                        imageDetails.add(imgDetails);
                    }
                }
                adapterImages.notifyDataSetChanged();
            }
            break;
        case 144:
            if (data != null) {
                if (resultCode == Activity.RESULT_OK) {
                    String strData = data.getDataString();
                    Uri[] resultFileChooser = null;
                    try {
                        if (data.getClipData() == null) {
                            L.e("data Clicp is Null");
                        }
                        resultFileChooser = new Uri[data.getClipData().getItemCount()];
                        for (int i = 0; i < data.getClipData().getItemCount(); i++) {
                            ImageDetails details = new ImageDetails();

                            details.setPath(getPath(data.getClipData().getItemAt(i).getUri()));
                            details.setURI(data.getClipData().getItemAt(i).getUri());
                            details.setName(MyUtil.getFilename(data.getClipData().getItemAt(i).getUri(), getActivity()));

                            imageDetails.add(details);

                            L.e("Uri : " + details.getPath());
                        }
                    } catch (NullPointerException e) {
                        if (strData != null) {
                            resultFileChooser = new Uri[]{Uri.parse(strData)};
                            ImageDetails imgDetails = new ImageDetails();
                            imgDetails.setName(MyUtil.getFilename(Uri.parse(strData), getActivity()));
                            imgDetails.setPath(getPath(Uri.parse(strData)));
                            imgDetails.setURI(Uri.parse(strData));
                            imageDetails.add(imgDetails);
                            L.e("Uri : " + imgDetails.getPath());

                        }
                    }
                }
                adapterImages.notifyDataSetChanged();
            }
            break;
    }
}
private void orderRequest(){
最终的OrderRequestModel模型=basicInfiFragment.getData();
model.setSs(steelFragment.getProductInfo());
model.setaluminal(aluminiumFragment.getProductInfo());
SimpleMultiPartRequest orderRequest=新SimpleMultiPartRequest(Request.Method.POST,
Constance.baseURL+Constance.orderURL,new com.android.volley.Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
DialogUtil.hideprogress();
ProductModel mResponse=new Gson().fromJson(响应,ProductModel.class);
if(mResponse.getStatus().equalsIgnoreCase(Constance.success)){
Toast.makeText(getContext(),mResponse.getMessage(),Toast.LENGTH_SHORT).show();
Intent Intent=新的Intent(getContext(),MainActivity.class);
getContext().startActivity(意图);
getActivity().finish();
}否则{
SnackUtil.mackText(mBinding.layoutRoot,mResponse.getMessage(),true);
}
L.e(答复);
}
},new com.android.volley.Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
L.e(error.toString());
DialogUtil.hideprogress();
DialogUtil.somethingWentRong(getContext());
}
});
Map headerMap=newhashmap();
headerMap.put(“令牌”,SP.getString(SP.token));
对于(ImageDetails ImageDetails:model.getImageList()){
orderRequest.addStringParam(“json”,new Gson().toJson(model));
orderRequest.addFile(“siteImages”,imageDetails.getPath());
orderRequest.addMultipartParam(imageDetails.getName(),getActivity()。
getContentResolver().getType(imageDetails.getURI()),imageDetails.getPath();
orderRequest.setHeaders(headerMap);
}
DialogUtil.showProgress(getContext());
RequestQueue RequestQueue=Volley.newRequestQueue(getContext());
添加(orderRequest);
}
我尝试了很多,但它只上传了一张图片,请帮助我摆脱过去三天以来的困境

SecondFragment.java

private void orderRequest() {

    final OrderRequestModel model = basicInfiFragment.getData();
    model.setSs(steelFragment.getProductInfo());
    model.setAluminium(aluminiumFragment.getProductInfo());

    SimpleMultiPartRequest orderRequest = new SimpleMultiPartRequest(Request.Method.POST,
            Constance.baseURL + Constance.orderURL, new com.android.volley.Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            DialogUtil.hideProgrss();
            ProductModel mResponse = new Gson().fromJson(response, ProductModel.class);
            if (mResponse.getStatus().equalsIgnoreCase(Constance.success)) {
                Toast.makeText(getContext(), mResponse.getMessage(), Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(getContext(), MainActivity.class);
                getContext().startActivity(intent);
                getActivity().finish();
            } else {
                SnackUtil.mackText(mBinding.layoutRoot, mResponse.getMessage(), true);
            }
            L.e(response);
        }
    }, new com.android.volley.Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            L.e(error.toString());
            DialogUtil.hideProgrss();
            DialogUtil.someThingWentWrong(getContext());
        }
    });

    Map<String, String> headerMap = new HashMap<>();
    headerMap.put("token", SP.getString(SP.TOKEN));



    for (ImageDetails imageDetails : model.getImageList()) {

            orderRequest.addStringParam("json", new Gson().toJson(model));
            orderRequest.addFile("siteImages",imageDetails.getPath());
            orderRequest.addMultipartParam(imageDetails.getName(), getActivity().
                    getContentResolver().getType(imageDetails.getURI()), imageDetails.getPath());
            orderRequest.setHeaders(headerMap);
        }


    DialogUtil.showProgress(getContext());
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(orderRequest);
}
public OrderRequestModel getData() {
    OrderRequestModel model = new OrderRequestModel();
    try {
           model.setImageList(imageDetails);
         } catch (Exception e) {
        SnackUtil.mackText(mBinding.layoutRoot, getString(R.string.some_things_went_wrong), true);
        L.e("date parse Error : " + e.getMessage());
    }
    return model;
}


 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case 122:
            if (data != null) {
                if (resultCode == Activity.RESULT_OK) {
                    Bitmap image = (Bitmap) data.getExtras().get("data");
                    String strData = String.valueOf(data.getData());
                    L.e("Camera : " + strData);
                    if (image != null) {
                        ImageDetails imgDetails = new ImageDetails();
                         imgDetails.setName(MyUtil.getFilename(Uri.parse(strData), getActivity()));
                        imgDetails.setBitmap(image);
                        imgDetails.setName("image" + new Random().nextInt(1000));

                        imageDetails.add(imgDetails);
                    }
                }
                adapterImages.notifyDataSetChanged();
            }
            break;
        case 144:
            if (data != null) {
                if (resultCode == Activity.RESULT_OK) {
                    String strData = data.getDataString();
                    Uri[] resultFileChooser = null;
                    try {
                        if (data.getClipData() == null) {
                            L.e("data Clicp is Null");
                        }
                        resultFileChooser = new Uri[data.getClipData().getItemCount()];
                        for (int i = 0; i < data.getClipData().getItemCount(); i++) {
                            ImageDetails details = new ImageDetails();

                            details.setPath(getPath(data.getClipData().getItemAt(i).getUri()));
                            details.setURI(data.getClipData().getItemAt(i).getUri());
                            details.setName(MyUtil.getFilename(data.getClipData().getItemAt(i).getUri(), getActivity()));

                            imageDetails.add(details);

                            L.e("Uri : " + details.getPath());
                        }
                    } catch (NullPointerException e) {
                        if (strData != null) {
                            resultFileChooser = new Uri[]{Uri.parse(strData)};
                            ImageDetails imgDetails = new ImageDetails();
                            imgDetails.setName(MyUtil.getFilename(Uri.parse(strData), getActivity()));
                            imgDetails.setPath(getPath(Uri.parse(strData)));
                            imgDetails.setURI(Uri.parse(strData));
                            imageDetails.add(imgDetails);
                            L.e("Uri : " + imgDetails.getPath());

                        }
                    }
                }
                adapterImages.notifyDataSetChanged();
            }
            break;
    }
}
public OrderRequestModel getData(){ OrderRequestModel模型=新的OrderRequestModel(); 试一试{ model.setImageList(imageDetails); }捕获(例外e){ SnackUtil.mackText(mBinding.layoutRoot,getString(R.string.something\u-things\u-gow\u-error),true); L.e(“日期分析错误:+e.getMessage()); } 收益模型; } @凌驾 ActivityResult上的公共void(int请求代码、int结果代码、意图数据){ super.onActivityResult(请求代码、结果代码、数据); 开关(请求代码){ 案例122: 如果(数据!=null){ if(resultCode==Activity.RESULT\u确定){ 位图图像=(位图)数据.getExtras().get(“数据”); String strData=String.valueOf(data.getData()); L.e(“摄像机:”+strData); 如果(图像!=null){ ImageDetails imgDetails=新的ImageDetails(); setName(MyUtil.getFilename(Uri.parse(strData),getActivity()); imgDetails.setBitmap(图像); setName(“image”+new Random().nextInt(1000)); imageDetails.add(imgDetails); } } AdapterImage.notifyDataSetChanged(); } 打破 案例144: 如果(数据!=null){ if(resultCode==Activity.RESULT\u确定){ 字符串strData=data.getDataString(); Uri[]resultFileChooser=null; 试一试{ if(data.getClipData()==null){ L.e(“数据Clicp为空”); } resultFileChooser=newURI[data.getClipData().getItemCount()]; 对于(int i=0;i
这是我正在尝试的代码。我还粘贴了我的onActivity代码和multipart代码。

您可能希望在选择时启用multi-selection,然后与服务器同步

 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setType("image/*");
        startActivityForResult(intent, READ_REQUEST_CODE);
您将在onActivity中收到多个Uri,用于获取文件对象,然后与s同步