Android25图灵聊天项目------异步任务类的使用
2015-06-06 08:57
656 查看
package com.by.android; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.Menu; import android.view.View; import android.widget.ImageView; /* A.异步任务类的总结 * 一. 泛型<Params, Progress, Result> * 1.Params访问资源的URL; * * 从new MyAsyncTask().execute(params); * 传到doInBackground(String... params) * * 2.Progress下载进度 * * 从publishProgress(downloadlenth * 100 / contentlenth); * 传到onProgressUpdate(Integer... values) * * 3.Result doInBackground完成的结果 * * 从return bitmap; * 传到onPostExecute(Bitmap result) * 以上三个参数都要在定义好异步任务类时定义好,下面方法的参数会根据他们改变 * 二、方法 * onPreExecute() * 此方法是主线程,在执行之前,通常在里面做一些准备操作 * * doInBackground(String... params) * 此方法是子线程,在此方法中完成下载 * * onProgressUpdate(Integer... values) * 此方法是主线程,更新UI控件 * * onPostExecute(Bitmap result) * 此方法是主线程,通过参数拿到 doInBackground的返回值 * * B.控件ProgressDialog进度对话框,很好用 * 凡是Dialog控件都不用再xml文件中写 * 都是用代码实现的 * */ public class MainActivity extends Activity { private ImageView iv; // 文件总大小 private int contentlenth; // 文件下载量 private int downloadlenth; private Bitmap bitmap; // 定义进度对话框 private ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } public void btn_asynctask(View v) { // 主线程 String params = "http://10.0.2.2:7070/FileDownLoad/car.jpg"; // 启动异步任务类并通过参数把路径传到doInBackground new MyAsyncTask().execute(params); } class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> { // 此方法是主线程,在执行之前,通常在里面做一些准备操作 @Override protected void onPreExecute() { super.onPreExecute(); dialog.show(); } // 此方法是子线程,在此方法中完成下载 // 参数String... params,相当于String[]params; @Override protected Bitmap doInBackground(String... params) { ByteArrayOutputStream bos = null; InputStream is = null; // 完成下载 try { String path = params[0]; URL url = new URL(path); HttpURLConnection httpurlconnetion = (HttpURLConnection) url .openConnection(); httpurlconnetion.setConnectTimeout(3000); httpurlconnetion.setRequestMethod("GET"); if (httpurlconnetion.getResponseCode() == 200) { System.out.println("网络连接成功。。。"); is = httpurlconnetion.getInputStream(); contentlenth = httpurlconnetion.getContentLength(); bos = new ByteArrayOutputStream(); int len = 0; byte[] bs = new byte[1024]; while ((len = is.read(bs)) != -1) { bos.write(bs, 0, len); downloadlenth += len; // 发送进度 publishProgress(downloadlenth * 100 / contentlenth); } byte[] content = bos.toByteArray(); bitmap = BitmapFactory.decodeByteArray(content, 0, content.length); bos.close(); is.close(); } } catch (Exception e) { e.printStackTrace(); } return bitmap; } // 此方法是主线程,更新UI控件 // Integer... values参数相当于Integer[]values @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); // 设置进度条 dialog.setProgress(values[0]); } // 此方法是主线程,通过参数拿到 doInBackground的返回值 @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); // 把位图展现到界面上 iv.setImageBitmap(result); dialog.dismiss(); } } private void init() { iv = (ImageView) findViewById(R.id.iv); // 实例化进度对话框,并进行相关设置 dialog = new ProgressDialog(this); // 给对话框中设置进度条 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); } }源码下载
http://download.csdn.net/detail/zhaihaohao1/8777907
相关文章推荐
- 【转】Android下编译jni库的二种方法(含示例) -- 不错
- 【转】如何定制android源码的编译选项 & 后期安装? ---- 不错
- Android中的volley_12_请求重试策略RetryPolicy和DefaultRetryPolicy
- Android编程读写首选项
- Android——SharedPreferences实现登录界面的记住密码和自动登录功能
- 菜鸟学Android笔记(二十四):ServletContext1
- 在android工程中导入图片
- 无法打开Android SDK Manager的解决办法
- 菜鸟学Android笔记(二十三):ServletConfig
- android style 退出动画 解决退出动画无效问题
- android窗体动画:activity启动从底部向上滑动出现,关闭的时候从顶部向下滑动消失的动画实现
- 6.5android 自定义相机,以及部分手机系统相机的bug
- Android自定义控件
- Android实现QQ第三方登录
- Android应用之最新版本SDKV2.4实现QQ第三方登录
- Qt for android 截屏、Qml保存图片到本地
- Android学习日记(10)
- Android抽象布局——include、merge 、ViewStub .
- Android学习日记(9)
- Spinner的OnItemSelectedListener事件(在布局文件中通过Spinner的android:entries属性加载列表)