Android 通过截击和水平进度条发送多部分图像

Android 通过截击和水平进度条发送多部分图像,android,file-upload,android-progressbar,multipart,android-volley,Android,File Upload,Android Progressbar,Multipart,Android Volley,我想上传图像通过截击使用多部分,还想在图像上传过程中显示进度对话框 我在上传图像时使用,并且 并使用下面的代码进行上传 public void doFileUpload(ArrayList<MyUploadImage> images){ try { //MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); //entityBuild

我想上传图像通过截击使用多部分,还想在图像上传过程中显示进度对话框

我在上传图像时使用,并且

并使用下面的代码进行上传

public void doFileUpload(ArrayList<MyUploadImage> images){
        try {
            //MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
            //entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

            JSONObject jo = new JSONObject();
            jo.put("NoOfImages", images.size());

            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(link);

            CustomMultiPartEntity multipartContent = new CustomMultiPartEntity(new ProgressListener()
            {
                @Override
                public void transferred(long num)
                {
                    pd.setProgress((int) ((num / (float) totalSize) * 100));
                }
            });

            //MultipartEntity reqEntity = new MultipartEntity();
            int size = images.size();
            for(int i = 0; i < size; i++){
                FileBody bin1 = new FileBody(images.get(i).getImageFile());

                multipartContent.addPart(("uploaded_file"+i), bin1);
            }

            multipartContent.addPart("girish", new StringBody(jo.toString()));
            totalSize = multipartContent.getContentLength();

            post.setEntity(multipartContent);
            HttpResponse response = client.execute(post);

            HttpEntity resEntity = response.getEntity();

            final String response_str = EntityUtils.toString(resEntity);

            Log.e("Response", response_str);

            pd.dismiss();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            pd.dismiss();
        } catch (Exception e) {
            e.printStackTrace();
            pd.dismiss();
        }

    }
public void doFileUpload(ArrayList图像){
试一试{
//MultipartEntityBuilder entityBuilder=MultipartEntityBuilder.create();
//entityBuilder.setMode(与HttpMultipartMode.BROWSER_兼容);
JSONObject jo=新的JSONObject();
jo.put(“NoOfImages”,images.size());
HttpClient=new DefaultHttpClient();
HttpPost=新的HttpPost(链接);
CustomMultiPartEntity multipartContent=新CustomMultiPartEntity(new ProgressListener())
{
@凌驾
已转移的公共无效(长数值)
{
pd.setProgress((int)((num/(float)totalSize)*100));
}
});
//MultipartEntity reqEntity=新的MultipartEntity();
int size=images.size();
对于(int i=0;i

谢谢

Volley不支持多部分。但您仍然可以使用volley的框架并为您提供 自己的HttpStack实现,就像我们用于SSL连接一样

public class MultiPartRequest extends JsonRequest<JSONObject> {

    /* To hold the parameter name and the File to upload */
    private Map<String,File> fileUploads = new HashMap<String,File>();

    /* To hold the parameter name and the string content to upload */
    private Map<String,String> stringUploads = new HashMap<String,String>();

    public void addFileUpload(String param,File file) {
        fileUploads.put(param,file);
    }

    public void addStringUpload(String param,String content) {
        stringUploads.put(param,content);
    }

    public Map<String,File> getFileUploads() {
        return fileUploads;
    }

    public Map<String,String> getStringUploads() {
        return stringUploads;
    }
}
public类MultiPartRequest扩展了JsonRequest{
/*保存参数名称和要上载的文件*/
private Map fileUploads=新建HashMap();
/*保存要上载的参数名称和字符串内容*/
private Map stringUploads=新建HashMap();
public void addFileUpload(字符串参数,文件文件){
fileUploads.put(param,file);
}
public void addStringUpload(字符串参数、字符串内容){
stringUploads.put(参数,内容);
}
公共映射getFileUploads(){
返回文件上传;
}
公共映射getStringUploads(){
返回上传;
}
}
在HttpStack实现中,创建MultiPartEntity并将其设置为HttpRequest。有关更多详细信息,请参阅SslHttpStack createHttpRequest方法

private static void setMultiPartBody(HttpEntityEnclosingRequestBase httpRequest, Request<?> request) throws AuthFailureError {

    // Return if Request is not MultiPartRequest
    if(request instanceof MultiPartRequest == false) {
        return;
    }

    MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  
    //Iterate the fileUploads
    Map<String,File> fileUpload = ((MultiPartRequest)request).getFileUploads();

    for (Map.Entry<String, File> entry : fileUpload.entrySet()) {
        multipartEntity.addPart(((String)entry.getKey()), new FileBody((File)entry.getValue()));
    }

    //Iterate the stringUploads
    Map<String,String> stringUpload = ((MultiPartRequest)request).getStringUploads();

    for (Map.Entry<String, String> entry : stringUpload.entrySet()) {
        try {
            multipartEntity.addPart(((String)entry.getKey()), new StringBody((String)entry.getValue()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    httpRequest.setEntity(multipartEntity);
}
private static void setMultiPartBody(httpentityenclosuringrequestbase httpRequest,Request-Request)抛出AuthFailureError{
//如果请求不是MultiPartRequest,则返回
if(请求实例of MultiPartRequest==false){
返回;
}
MultipartEntity MultipartEntity=新的MultipartEntity(HttpMultipartMode.BROWSER_兼容);
//迭代文件上传
MapFileUpload=((MultiPartRequest)请求).getFileUploads();
对于(Map.Entry:fileUpload.entrySet()){
addPart(((String)entry.getKey()),新文件体((File)entry.getValue());
}
//迭代stringUploads
Map stringUpload=((MultiPartRequest)请求).getStringUploads();
对于(Map.Entry:stringUpload.entrySet()){
试一试{
addPart(((String)entry.getKey()),newstringbody((String)entry.getValue());
}捕获(例外e){
e、 printStackTrace();
}
}
httpRequest.setEntity(多协议实体);
}
请参见此处的解决方案: