`
切切歆语
  • 浏览: 30470 次
  • 性别: Icon_minigender_1
  • 来自: 泸州市
社区版块
存档分类
最新评论

Volley-XUtils-OkHttp三种方式实现单张多张图片上传

阅读更多

OkHttp可以作为Volley底层传输协议,速度更快,传大量图片建议使用。OkHttp更多功能请看OkHttp的使用

 

xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...

 

xUtils一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块。相关请看xUtils框架的使用博客

 

使用Volley上传,猪哟是继承volley的Request类,然后通过使用httpmim的MultipartEntity类对文件参数进行封装。

 

Volley更多功能请看Volley框架使用

 

所需的jar包:

 

 

 

httpclient-4.3.5.jarandroid-async-http-1.4.4.jar

 

 httpcore-4.3.2.jar,        httpmime-4.3.5

 

okhttp.jarokio.jarvolley.jarxUtils-2.6.2.jar

 

 

 

OkHttp:

 

	private static final Handler handler = new Handler(Looper.getMainLooper());

	private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/*");

	private static final OkHttpClient client = new OkHttpClient.Builder()
			.addInterceptor(new Interceptor() {
				@Override
				public Response intercept(Chain chain) throws IOException {
					okhttp3.Request request = chain.request().newBuilder()
							.build();
					return chain.proceed(request);
				}
			}).readTimeout(15, TimeUnit.SECONDS)// 设置读取超时时间
			.writeTimeout(15, TimeUnit.SECONDS)// 设置写的超时时间
			.connectTimeout(15, TimeUnit.SECONDS)// 设置连接超时时间
			.build();

	// 上传图片公有方法
	private final static void uploadImgAndParameter(Map<String, Object> map,
			String url) {

		// mImgUrls为存放图片的url集合
		MultipartBody.Builder builder = new MultipartBody.Builder()
				.setType(MultipartBody.FORM);

		if (null != map) {
			for (Map.Entry<String, Object> entry : map.entrySet()) {
				if (entry.getValue() != null) {
					if (entry.getValue() instanceof File) {
						File f = (File) entry.getValue();
						builder.addFormDataPart(entry.getKey(), f.getName(),
								RequestBody.create(MEDIA_TYPE_PNG, f));
					} else {
						builder.addFormDataPart(entry.getKey(), entry
								.getValue().toString());
					}
				}

			}
		}
		// 创建RequestBody
		RequestBody body = builder.build();
		final okhttp3.Request request = new okhttp3.Request.Builder().url(url)// 地址
				.post(body)// 添加请求体
				.build();
		client.newCall(request).enqueue(new okhttp3.Callback() {

			@Override
			public void onResponse(Call call, final Response response)
					throws IOException {
				final String data = response.body().string();
				Log.i(TAG, "上传照片成功-->" + data);
				call.cancel();// 上传成功取消请求释放内存
			}

			@Override
			public void onFailure(Call call, final IOException e) {
				Log.i(TAG, "上传失败-->" + e.getMessage());
				call.cancel();// 上传失败取消请求释放内存
			}

		});

	}



XUtils:

 

 

HttpUtils http = new HttpUtils();
		RequestParams params = new RequestParams();
		params.addBodyParameter("c", "comment");
		params.addBodyParameter("a", "add");
		params.addBodyParameter("uid", "1000191");
		params.addBodyParameter("dataid", "1114");
		params.addBodyParameter("message", "你好");
		params.addBodyParameter("datatype", "goodsid");
		for (int i = 0; i < 2; i++) {
			params.addBodyParameter("filedata" + i, file[i]);
		}
		http.send(HttpRequest.HttpMethod.POST, url, params,
				new RequestCallBack<String>() {

					@Override
					public void onFailure(HttpException arg0, String arg1) {

					}

					@Override
					public void onSuccess(ResponseInfo<String> arg0) {
						Log.i(TAG, arg0.result.toString());
					}

				});



 

 

Volley:

 

 

public static void addPutUploadFileRequest(final Map<String, File> files,
			final Map<String, String> params,
			final Listener<String> responseListener,
			final ErrorListener errorListener) {
		if (null == url || null == responseListener) {
			return;
		}

		MultiPartStringRequest multiPartRequest = new MultiPartStringRequest(
				Request.Method.POST, url, responseListener, errorListener) {

			@Override
			public Map<String, File> getFileUploads() {
				return files;
			}

			@Override
			public Map<String, String> getStringUploads() {
				return params;
			}

		};

		mSingleQueue.add(multiPartRequest);
	}

	Listener<JSONObject> mResonseListener = new Listener<JSONObject>() {

		@Override
		public void onResponse(JSONObject response) {
			Log.i(TAG + "1", response.toString());
		}
	};

	Listener<String> mResonseListenerString = new Listener<String>() {

		@Override
		public void onResponse(String response) {
			Log.i(TAG + "2", response.toString());
		}
	};

	ErrorListener mErrorListener = new ErrorListener() {

		@Override
		public void onErrorResponse(VolleyError error) {
			if (error != null) {
				if (error.networkResponse != null)
					Log.i(TAG + "3", " error "
							+ new String(error.networkResponse.data));
			}
		}
	};



 

 

不要忘记AndroidManifest.xml加权限哦!

 

 

由于代码太多,完整代码未给出,源码直接下载即可

 

 

源码点击下载

分享到:
评论

相关推荐

    Volley,xUtils,okHttp第三方网络框架jar包

    为了简化这一过程,开发者通常会使用第三方网络框架,例如Volley、xUtils和OkHttp。这些框架提供了高效、易用的API,帮助开发者快速实现网络数据的获取和传输。接下来,我们将详细讨论这三个著名的网络库。 1. **...

    网络请求框架volley-master

    网络请求框架volley-master网络请求框架volley-master

    android-volley-master.zip

    3. Android Tipshttp://dev.classmethod.jp/smartphone/android/android-tips-51-volley/ 4. Google I/O 2013 – Android : Volley: Easy, Fast Networking for Android ...

    volley和okhttp的jar包含volley源码

    Volley和OkHttp是Android平台上的两种常用的网络请求库,它们在进行网络数据通信时扮演着重要的角色。这里我们详细探讨这两个库的核心功能、特点以及它们的使用。 Volley是Google在2013年I/O大会上推出的一款网络...

    volley-master包

    在 Android Studio 中,你可以直接引入 `volley.jar` 包来快速实现网络通信功能,无需进行额外的压缩或解压操作。 Volley 的核心优势在于它的设计理念,它对网络请求进行了优化,提供了异步处理、缓存机制以及错误...

    volley_okhttp_retrofit三种请求方式的基本用法

    本篇文章将详细讲解Volley、OkHttp和Retrofit这三种常用的网络请求库的基本用法,帮助开发者更好地理解和选择适合自己的请求方式。 **Volley** Volley是由Google官方推出的网络请求库,它专注于Android平台,提供...

    android-volley-master volley library。android开发之Google官方开源框架,著名的开源框架

    1. **请求队列**:Volley使用RequestQueue作为所有网络请求的入口,它可以管理多个并发请求,按照优先级和依赖关系进行调度。RequestQueue允许开发者轻松地添加、取消和控制请求的执行顺序。 2. **网络接口**:...

    给android初学者的福利,网络通信框架volley-demo

    3. "更多源码免费下载.url" - 这可能是一个链接,提供更多的Android源码或者Volley相关资源的下载途径。 4. "volley-demo" - 这很可能是一个包含Volley框架实际应用的示例项目,初学者可以通过分析和运行这个项目来...

    Volley上传图片(单多图)

    本篇将重点讲解如何利用Volley库来实现图片的上传功能,包括单张图片和多张图片的上传。 首先,我们需要了解Volley中的`RequestQueue`是处理所有网络请求的核心组件。创建一个`RequestQueue`实例后,我们可以向其...

    volley和okhttp的jar包

    Volley和OkHttp是两种广泛使用的网络请求库,在Android应用开发中扮演着重要角色。Volley是由Google开发的网络通信库,它强调了快速响应和轻量级的特性,适合处理大量的小数据请求,如获取JSON数据或者图片加载。而...

    Android代码-基于Volley、OKHTTP的Rest API请求框架

    A http request engine based on Volley and OkHttp, giving up Apache HttpClient request. supports image loading, restful api requesting, and file downloading. READ MORE Dependency binary on jcenter ...

    Android代码-OkHttp-Volley-Gson

    Android Networking I: OkHttp, Volley and Gson This is a sample app which demonstrates and shows what it's explained in a Medium article about networking in Android. Check out the next article for ...

    使用Volley-jar的包

    - **多线程支持**:Volley使用RequestQueue管理网络请求,内部实现异步处理,确保UI线程不被阻塞。 2. **Volley的基本组件**: - **RequestQueue**:这是Volley的核心,负责管理所有网络请求,调度它们的执行顺序...

    Volley-ImageLoader-Demo

    在“Volley-ImageLoader-Demo”中,我们主要探讨的是如何利用Volley框架中的ImageLoader组件来加载网络上的图片。下面将详细介绍Volley的ImageLoader及其在示例中的应用。 一、Volley框架 Volley是一个轻量级的...

    android-volley-master.zip_android

    - **图片加载**:Volley 可以配合 Glide 或 Picasso 实现图片的高效加载。 通过研究“android-volley-master”源代码,开发者可以深入了解 Volley 的工作原理,进行性能优化,或者定制适合自己项目的网络库。同时...

    Android-Volley-Polished:Android Volley 网络库通过添加 OKHttp 2.3 堆栈、多部分请求、Gson 等进行了完善。

    功能集: - `OkHttp` + `okio` 集成以实现快速联网 - 少数`Gson` 请求 - 少数`Multipart` 请求 - 在新请求中添加了自定义标头和参数支持 - 添加了默认的 `LruBitmapCache` 实现。 - 只需扩展 `AbstractVolleyManager...

    最新版volley-6.0.jar

    google出的最新版volley的jar包,可以直接导入工程使用。

    AndroidVolley-master

    AndroidVolley-masterAndroidVolley-masterAndroidVolley-

    volley-1.0.11.jar

    volley-1.0.11.jar, 直接引入

Global site tag (gtag.js) - Google Analytics