• 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的其它请求方法基本上一样,只不过参数不太一样。

  • 相关阅读:
    浏览器低延时播放监控摄像头视频(EasyNVR播放FLV视频流)
    RTSP/Onvif摄像机在做H5无插件直播中遇到对接海康摄像机发送OPTIONS心跳的问题
    EasyDarwin系列互联网视频直播录像方案的选择
    EasyNVR配置需求
    EasyNVR硬件云终端与EasyNVR综合对比
    EasyNVR使用过程中问题的自我排查设备不在线问题自我排查检测
    EasyNVR在Linux系统下将录像文件与EasyNVR运行分离
    EasyNVR硬件云终端使用说明(问题的自我排查与解决)
    EasyNVR内网接入网关+EasyNVS云端管理平台,组件起一套轻量级类似于萤石云的解决方案
    EasyNVR支持的设备接入类型以及关于国标设备是否支持接入EasyNVR
  • 原文地址:https://www.cnblogs.com/819158327fan/p/5125656.html
Copyright © 2020-2023  润新知