Android带进度条的文件上传,使用AsyncTask异步任务
来源:互联网 发布:农村淘宝400电话 编辑:程序博客网 时间:2024/04/28 04:04
最近项目中要做一个带进度条的上传文件的功能,学习了AsyncTask,使用起来比较方便,将几个方法实现就行,另外做了一个很简单的demo,希望能对大家有帮助,在程序中设好文件路径和服务器IP即可。
demo下载:
android异步上传小demo.zip
demo运行截图:
AsyncTask是抽象类,子类必须实现抽象方法doInBackground(Params... p),在此方法中实现任务的执行工作,比如联网下载或上传。AsyncTask定义了三种泛型类型Params,Progress和Result。
1、Params 启动任务执行的输入参数,比如HTTP请求的URL,上传文件的路径等;
2、Progress 后台任务执行的百分比;
3、Result 后台执行任务的最终返回结果,比如String。
AsyncTask 的执行分为四个步骤,与前面定义的TaskListener类似。每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。在任务的执行过程中,这些方法被自动调用。
1、onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。
2、doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
3、onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
4、onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.
主进程中使用下面两行开始异步任务:
mTask = new MyTask();mTask.execute(filePath, url);doInBackground()函数中,params[0]和params[1]本别对应execute()的第一个和第二个变量。
private class MyTask extends AsyncTask<String, Integer, String>{@Overrideprotected void onPostExecute(String result) {//最终结果的显示mTvProgress.setText(result);}@Overrideprotected void onPreExecute() {//开始前的准备工作mTvProgress.setText("loading...");}@Overrideprotected void onProgressUpdate(Integer... values) {//显示进度mPgBar.setProgress(values[0]);mTvProgress.setText("loading..." + values[0] + "%");}@Overrideprotected String doInBackground(String... params) {//这里params[0]和params[1]是execute传入的两个参数String filePath = params[0];String uploadUrl = params[1];//下面即手机端上传文件的代码String end = "\r\n";String twoHyphens = "--";String boundary = "******";try {URL url = new URL(uploadUrl);HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();httpURLConnection.setDoInput(true);httpURLConnection.setDoOutput(true);httpURLConnection.setUseCaches(false);httpURLConnection.setRequestMethod("POST");httpURLConnection.setConnectTimeout(6*1000);httpURLConnection.setRequestProperty("Connection", "Keep-Alive");httpURLConnection.setRequestProperty("Charset", "UTF-8");httpURLConnection.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);DataOutputStream dos = new DataOutputStream(httpURLConnection.getOutputStream());dos.writeBytes(twoHyphens + boundary + end);dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\""+ filePath.substring(filePath.lastIndexOf("/") + 1)+ "\"" + end);dos.writeBytes(end);//获取文件总大小FileInputStream fis = new FileInputStream(filePath);long total = fis.available();byte[] buffer = new byte[8192]; // 8kint count = 0;int length = 0;while ((count = fis.read(buffer)) != -1) {dos.write(buffer, 0, count);//获取进度,调用publishProgress()length += count;publishProgress((int) ((length / (float) total) * 100));//这里是测试时为了演示进度,休眠500毫秒,正常应去掉Thread.sleep(500);}fis.close();dos.writeBytes(end);dos.writeBytes(twoHyphens + boundary + twoHyphens + end);dos.flush();InputStream is = httpURLConnection.getInputStream();InputStreamReader isr = new InputStreamReader(is, "utf-8");BufferedReader br = new BufferedReader(isr);@SuppressWarnings("unused")String result = br.readLine();dos.close();is.close();return "上传成功";}catch (Exception e) {e.printStackTrace();return "上传失败";}}
界面中只要一个进度条progressBar 和一个用于显示的TextView即可。
- Android带进度条的文件上传,使用AsyncTask异步任务
- android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
- Android异步任务之AsyncTask的使用
- Android 异步任务 AsyncTask 的使用总结
- Android 异步任务AsyncTask的使用
- Android中异步任务AsyncTask的使用
- Android AsyncTask异步任务的使用
- Android 异步任务AsyncTask的使用
- 异步任务 AsyncTask 进度条的更新
- Android异步任务AsyncTask使用
- android实现带进度条的文件上传
- js+java 带进度条的文件上传,同步+异步
- js+java 带进度条的文件上传-同步+异步
- android的异步任务AsyncTask
- 异步任务AsyncTask的使用
- AsyncTask异步任务的使用
- Android带进度条文件上传
- 带进度条的文件上传
- 激发程序员创意的6本书
- Yeslab现任明教教主数据中心第二门课程UCS 视频教程下载
- MySQL使用information_schema获取锁表信息
- VS2010静态编译cURL
- hdu 4288 Coder(线段树)
- Android带进度条的文件上传,使用AsyncTask异步任务
- Gumbo实例测试
- 程序员技术练级攻略
- 熟悉基本通信协议(1)入门篇
- mysql的常用操作的封装
- allgro GND焊盘到敷铜之间的线宽
- Android_关于子控件和父控件的事件响应问题
- 关于共享内存的利用
- GDI/GDI+ 绘制网站流量统计报表 总结(4)