• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件

android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件


AsyncHttpClient开源框架android-async-http还是很方便的。 AsyncHttpClient该类通常用在android应用程序中创建异步GET,

POST, PUT和DELETE HTTP请求,请求参数通过RequestParams实例创建,响应通过重写匿名内部类 ResponseHandlerInterface的

方法处理。

1、看代码上传文件

 

	public void uploadFile(ArrayList sendFilesPath) {
		if (sendFilesPath.size() == 0) 
			return ;

		String strUploadFile = mstrIP + mstrUploadFile;
		AsyncHttpClient client = new AsyncHttpClient();
		client.setURLEncodingEnabled(false);

		RequestParams params = new RequestParams();
		params.put("user_name", mstrUser);
		params.put("token", mstrCheckPass);
		params.put("dir_parent", "@sys");
		//批量上传
		for (int i = 0; i < sendFilesPath.size(); i++) {
			File myFile = new File(sendFilesPath.get(i));
			try {
				params.put(myFile.getName(), myFile);
			} catch (FileNotFoundException e1) {
				continue;
			}
		}

		client.setTimeout(10000);
		client.post(strUploadFile, params, new AsyncHttpResponseHandler() {

			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable arg3) {
				Log.i("Show", "upload failed");
			}

			@Override
			public void onSuccess(int statusCode, Header[] headers,
					byte[] responseBody) {
				String responseData = new String();
				responseData = new String(responseBody);
				try {
					JSONObject jsonObject = new JSONObject(responseData);
					int status = jsonObject.getInt("status");
					if (status == 1) {
						Log.i("Show", "upload 1");
					}
				} catch (Exception e) {
				}
			}
			
	        @Override  
	        public void onProgress(int bytesWritten, int totalSize) {  
	            super.onProgress(bytesWritten, totalSize);  
	            int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);  
	            // 上传进度显示  
	            progress.setProgress(count);  
	            Log.e("上传 Progress>>>>>", bytesWritten + " / " + totalSize);  
	        }  
	  
	        @Override  
	        public void onRetry(int retryNo) {  
	            super.onRetry(retryNo);  
	            // 返回重试次数  
	        } 
		});
	}

 

2、删除服务器文件代码

 

 

	public void deleteFile(final ArrayList needDeleteFilesPath) {
		if (needDeleteFilesPath.size() == 0)
			return;
		String strDeleteFile = mstrIP + mstrDeleteFiles;
		AsyncHttpClient client = new AsyncHttpClient();
		client.setURLEncodingEnabled(false);
		RequestParams params = new RequestParams();
		params.put("user_name", mstrUser);
		params.put("token", mstrCheckPass);
		params.put("dir_parent", "@sys");
		// 批量
		for (int i = 0; i < needDeleteFilesPath.size(); i++) {
			params.put("files_id", needDeleteFilesPath.get(i));
			client.setTimeout(10000);
			client.post(strDeleteFile, params, new AsyncHttpResponseHandler() {

				@Override
				public void onFailure(int statusCode, Header[] headers,
						byte[] responseBody, Throwable arg3) {
					Log.i("Show", "delete faile");
				}

				@Override
				public void onSuccess(int statusCode, Header[] headers,
						byte[] responseBody) {
					String  responseData = new String(responseBody);
				}
			});
		}
	}

 

3、使用使用HttpURLConnection断点续传下载文件

 

AsyncTask异步管理下载文件,使用HttpURLConnection断点续传。

 

		TaskDownFile mDownFile = new TaskDownFile();
		mDownFile.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, url_downFile,fileName, String.valueOf(nDownID));
	public class TaskDownFile extends AsyncTask {
		@Override
		protected void onPreExecute() {
		}

		@Override
		protected Boolean doInBackground(String... arg0) {
			String mFilePath;
			String urlString = arg0[0];
			String fileName = arg0[1];
			int nDownID = Integer.parseInt(arg0[2]);
			HttpURLConnection conn;
			if (mFileInfos == null || mFileInfos.size() <= 0)
				return false;

			try {
				File file = new File(mstrFilePath);
				if (!file.exists())
					file.mkdir();
				mFilePath = mstrFilePath + "/" + fileName;

				// 判断当前安装包路径下面是否有已经下载的文件, 如有则不下载,只需要MD5校验即可
				String checkApkFilePath = mstrFilePath + "/" + fileName;
				File checkApkFile = new File(checkApkFilePath);

				if (checkApkFile.exists()) {
					// MD5校验
					String md5 = md5sum(mFilePath);
					String fileTime = getFileDataTime(checkApkFile);
					// MD5校验是否文件相同,在根据时间判断
					if (md5.compareToIgnoreCase(mFileInfos.get(nDownID).md5) == 0)
						return true;
					else if (compareDataTime(fileTime,
							mFileInfos.get(nDownID).create_time) > 0) {
						mNumberList.add(nDownID);
						return true;
					} else {
						// 服务器文件最新, 删除本地文件
						checkApkFile.delete();
					}
				}

				// 临时安装文件检验, 是否续传文件
				mFilePath = mFilePath + ".temp";
				long haveDownLength = 0;
				File tempFile = new File(mFilePath);
				if (tempFile.exists())
					haveDownLength = tempFile.length();

				conn = (HttpURLConnection) new URL(urlString).openConnection();
				if (haveDownLength != 0)
					conn.setRequestProperty("Connection", "Keep-Alive");
				conn.setReadTimeout(6000);
				conn.setConnectTimeout(3000);
				conn.setChunkedStreamingMode(0);
				conn.setRequestMethod("GET");

				conn.connect();

				int fileSize = conn.getContentLength();
				long countRead = haveDownLength;
				if (fileSize > 0) {
					InputStream stream = conn.getInputStream();
					FileOutputStream fos = new FileOutputStream(mFilePath,
							haveDownLength > 0 ? true : false);
					int read = 0;

					fileSize += haveDownLength;
					byte buffer[] = new byte[1024];
					while ((read = stream.read(buffer)) >= 0) {
						countRead += read;
						fos.write(buffer, 0, (int) read);
						publishProgress((int) countRead, fileSize);
					}
					fos.flush();
					stream.close();
					fos.close();
				} else {
					fileSize = (int) haveDownLength;
				}
				conn.disconnect();

				if (countRead != fileSize)
					return false;

				int index = mFilePath.indexOf(".temp");
				if (index >= 1) {
					String tempFilePath = mFilePath.substring(0, index);
					File renameFile = new File(mFilePath);
					File toFile = new File(tempFilePath);
					renameFile.renameTo(toFile);
					mFilePath = tempFilePath;
					return true;
				}
			} catch (IOException e) {
				Log.i("Show", e.toString());
				return false;
			} finally {
			}
			return false;
		}

		@Override
		protected void onPostExecute(Boolean isSuccess) {
			//下载后干什么
		}
		
		@Override 
		protected void onProgressUpdate(Integer...values) {
			//进度条
			if (values[0] == null) return;
			downSize = values[0];
			fileSize = values[1];
			progress = (int) ((values[0] * 1.0 / values[1]) * 10000);
			mHandler.sendEmptyMessage(DOWNLOAD);
		}
	}

 

4、MD5检验文件

 

 

	//文件md5获取
	public static String md5sum(String filename) {
		InputStream fis;
		byte[] buffer = new byte[1024];
		int numRead = 0;
		MessageDigest md5;
		try {
			fis = new FileInputStream(filename);
			md5 = MessageDigest.getInstance("MD5");
			while ((numRead = fis.read(buffer)) > 0) {
				md5.update(buffer, 0, numRead);
			}
			fis.close();
			return toHexString(md5.digest());
		} catch (Exception e) {
			System.out.println("error");
			return null;
		}
	}

	//十六进制转换成字符串
	public static String toHexString(byte[] b) {
		cha



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-26Android编译错误——undefined reference to,androidundefined
  • 2017-05-26上传图像之裁剪,图像裁剪
  • 2017-05-26Android的Message Pool是什么——源码角度分析,androidpool
  • 2017-05-26Android仿联系人列表分组悬浮列表实现,自定义PinnedHeaderListView实现
  • 2017-05-26浅谈Android 通过ADB Wireless无线调试应用
  • 2017-05-26android 所有焦点问题--Focus,android--focus
  • 2017-05-26android 管理wifi,androidwifi
  • 2017-05-26认识Activity,创建第一个android应用,activityandroid
  • 2017-05-26android测试工具MonkeyRunner--google官网翻译
  • 2017-05-26Android 学习之路,android学习之路

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • MAT使用入门,mat入门
    • Linux内核系列—操作系统开发之HelloWorld,linuxhelloworld
    • 深入理解RCU实现
    • andriod ==和equals,andriodequals
    • 第二个activity,启动第二个activity
    • 深度剖析:Android_PullToRefresh
    • getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir(),mediacachefiles
    • Linux下程序产生“段错误”的原因及其解决办法
    • 3.5 监听EditText的内容变化
    • 安卓第十六天笔记-音频与视频播放,安卓第视频播放

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有