zoukankan      html  css  js  c++  java
  • Android--用Valley框架去上传图片

    1、除了用到了Volley,还用到了一个包httpmime(下载地址:http://download.csdn.net/detail/chequer_lkp/8102751)

    2、需要一个工具类,该类是继承的Volley的Request

    package newairtek.com.utils;
    
    import com.android.volley.AuthFailureError;
    import com.android.volley.NetworkResponse;
    import com.android.volley.Request;
    import com.android.volley.Response;
    import com.android.volley.VolleyLog;
    import com.android.volley.toolbox.HttpHeaderParser;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.entity.mime.content.StringBody;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.nio.charset.Charset;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * Created by Administrator on 2016/1/12.
     * ---------Volley图片上传-------------
     */
    
    public class MultipartRequest extends Request<String> {
    
        private MultipartEntity entity = new MultipartEntity();
    
        private final Response.Listener<String> mListener;
    
        private List<File> mFileParts;
        private String mFilePartName;
        private Map<String, String> mParams;
        /**
         * 单个文件
         * @param url
         * @param errorListener
         * @param listener
         * @param filePartName
         * @param file
         * @param params
         */
        public MultipartRequest(String url, Response.ErrorListener errorListener,
                                Response.Listener<String> listener, String filePartName, File file,
                                Map<String, String> params) {
            super(Method.POST, url, errorListener);
    
            mFileParts = new ArrayList<File>();
            if (file != null) {
                mFileParts.add(file);
            }
            mFilePartName = filePartName;
            mListener = listener;
            mParams = params;
            buildMultipartEntity();
        }
        /**
         * 多个文件,对应一个key
         * @param url
         * @param errorListener
         * @param listener
         * @param filePartName
         * @param files
         * @param params
         */
        public MultipartRequest(String url, Response.ErrorListener errorListener,
                                Response.Listener<String> listener, String filePartName,
                                List<File> files, Map<String, String> params) {
            super(Method.POST, url, errorListener);
            mFilePartName = filePartName;
            mListener = listener;
            mFileParts = files;
            mParams = params;
            buildMultipartEntity();
        }
    
        private void buildMultipartEntity() {
            if (mFileParts != null && mFileParts.size() > 0) {
                for (File file : mFileParts) {
                    entity.addPart(mFilePartName, new FileBody(file));
                }
                long l = entity.getContentLength();
    //            CLog.log(mFileParts.size()+"个,长度:"+l);
            }
    
            try {
                if (mParams != null && mParams.size() > 0) {
                    for (Map.Entry<String, String> entry : mParams.entrySet()) {
                        entity.addPart(
                                entry.getKey(),
                                new StringBody(entry.getValue(), Charset
                                        .forName("UTF-8")));
                    }
                }
            } catch (UnsupportedEncodingException e) {
                VolleyLog.e("UnsupportedEncodingException");
            }
        }
    
        @Override
        public String getBodyContentType() {
            return entity.getContentType().getValue();
        }
    
        @Override
        public byte[] getBody() throws AuthFailureError {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            try {
                entity.writeTo(bos);
            } catch (IOException e) {
                VolleyLog.e("IOException writing to ByteArrayOutputStream");
            }
            return bos.toByteArray();
        }
    
        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
    //        CLog.log("parseNetworkResponse");
            if (VolleyLog.DEBUG) {
                if (response.headers != null) {
                    for (Map.Entry<String, String> entry : response.headers
                            .entrySet()) {
                        VolleyLog.d(entry.getKey() + "=" + entry.getValue());
                    }
                }
            }
    
            String parsed;
            try {
                parsed = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers));
            } catch (UnsupportedEncodingException e) {
                parsed = new String(response.data);
            }
            return Response.success(parsed,
                    HttpHeaderParser.parseCacheHeaders(response));
        }
    
    
        /*
         * (non-Javadoc)
         *
         * @see com.android.volley.Request#getHeaders()
         */
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            VolleyLog.d("getHeaders");
            Map<String, String> headers = super.getHeaders();
    
            if (headers == null || headers.equals(Collections.emptyMap())) {
                headers = new HashMap<String, String>();
            }
    
    
            return headers;
        }
    
        @Override
        protected void deliverResponse(String response) {
            mListener.onResponse(response);
        }
    }

    3、用法和Volley的其它请求方法基本上一样,只不过参数不太一样。

  • 相关阅读:
    eclipse 使用 maven 无法编译 jsp 文件的问题
    iOS开发-Quartz2D绘制时定时器选择
    iOSUI-事件处理
    iOS开发-数据存储
    iOSUI-UIScrollView属性,方法大全
    iOSUI-UITableView属性,方法大全
    iOS网络-NSURLSession/AFNetworking发送HTTPS网络请求
    iOS网络-AFNetworking检测网络状态
    iOS网络-AFNetworking序列化
    iOS网络-AFNetworking基本使用,文件下载,上传
  • 原文地址:https://www.cnblogs.com/819158327fan/p/5125656.html
Copyright © 2011-2022 走看看