免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2968 | 回复: 2

[Android] android两种方式获取AsyncTask返回值 [复制链接]

论坛徽章:
0
发表于 2015-07-30 14:54 |显示全部楼层
获取AsyncTask返回值,在Activity中使用。
代码
  1. 布局文件:
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:tools="http://schemas.android.com/tools"
  4.     android:layout_width="match_parent"
  5.     android:layout_height="match_parent"
  6.     android:orientation="vertical"
  7.    >
  8.    
  9.    <ImageView android:id="@+id/im1"
  10.       android:layout_width="wrap_content"
  11.        android:layout_height="wrap_content"
  12.        android:src="@drawable/ic_launcher" />
  13.    
  14.     <ImageView android:id="@+id/im2"
  15.       android:layout_width="wrap_content"
  16.        android:layout_height="wrap_content"
  17.        android:src="@drawable/ic_launcher" />

  18. </LinearLayout>
复制代码
代码
  1. 2.第一种,回调方法方式:
  2. package com.androidwallpaper;

  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.net.HttpURLConnection;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import java.util.concurrent.ExecutorService;
  10. import java.util.concurrent.Executors;

  11. import android.net.Uri;
  12. import android.os.AsyncTask;
  13. import android.os.Bundle;
  14. import android.os.Handler;
  15. import android.os.Message;
  16. import android.app.Activity;
  17. import android.app.WallpaperManager;
  18. import android.content.Intent;
  19. import android.graphics.Bitmap;
  20. import android.graphics.BitmapFactory;
  21. import android.view.Menu;
  22. import android.view.View;
  23. import android.view.View.OnClickListener;
  24. import android.widget.Button;
  25. import android.widget.ImageView;
  26. import android.widget.ProgressBar;
  27. import android.widget.Toast;

  28. public class MainActivity extends Activity implements OnClickListener{
  29.      
  30.      
  31.     ImageView im1;
  32.     ImageView im2;
  33.      

  34.     @Override
  35.     protected void onCreate(Bundle savedInstanceState) {
  36.         super.onCreate(savedInstanceState);
  37.         setContentView(R.layout.activity_main);
  38.          
  39.         im1 = (ImageView) findViewById(R.id.im1);
  40.         im2 = (ImageView) findViewById(R.id.im2);
  41.          
  42.         try {
  43.             final ImageViewAsyncTask task = new ImageViewAsyncTask("http://static.oschina.net/uploads/ad/new_banner_one_ronglianyun_WrqUs.png");
  44.             task.setOnDataFinishedListener(new OnDataFinishedListener() {
  45.                  
  46.                 @Override
  47.                 public void onDataSuccessfully(Object data) {
  48.                     try {
  49.                         im1.setImageBitmap((Bitmap) data);
  50.                     } catch (Exception e) {
  51.                         e.printStackTrace();
  52.                     }
  53.                 }
  54.                 @Override
  55.                 public void onDataFailed() {
  56.                     Toast.makeText(MainActivity.this, "加载失败!", Toast.LENGTH_SHORT).show();
  57.                 }
  58.             });
  59.             task.execute();
  60.         } catch (Exception e) {
  61.             e.printStackTrace();
  62.         }
  63.          
  64.          
  65.          
  66.     }

  67.      
  68.     class ImageViewAsyncTask extends AsyncTask<String, Integer, Bitmap> {
  69.          
  70.         String mUrl;
  71.         OnDataFinishedListener onDataFinishedListener;
  72.          
  73.         public ImageViewAsyncTask(String url){
  74.             this.mUrl = url;
  75.         }
  76.          
  77.          

  78.         public void setOnDataFinishedListener(
  79.                 OnDataFinishedListener onDataFinishedListener) {
  80.             this.onDataFinishedListener = onDataFinishedListener;
  81.         }


  82.         @Override
  83.         protected Bitmap doInBackground(String... params) {
  84.             InputStream ins = null;
  85.             Bitmap bitmap = null;
  86.             try {
  87.                 URL url = new URL(mUrl);
  88.                 HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  89.                 if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){
  90.                     ins = connection.getInputStream();
  91.                     bitmap = BitmapFactory.decodeStream(ins);
  92.                     return bitmap;
  93.                 }
  94.             } catch (MalformedURLException e) {
  95.                 e.printStackTrace();
  96.             } catch (IOException e) {
  97.                 e.printStackTrace();
  98.             }finally{
  99.                 if(ins!=null){
  100.                     try {
  101.                         ins.close();
  102.                     } catch (IOException e) {
  103.                         e.printStackTrace();
  104.                     }
  105.                 }
  106.             }
  107.             return null;
  108.         }

  109.         @Override
  110.         protected void onPreExecute() {
  111.             super.onPreExecute();
  112.             progressBar.setVisibility(View.VISIBLE);
  113.         }

  114.         @Override
  115.         protected void onPostExecute(Bitmap result) {
  116.             progressBar.setVisibility(View.GONE);
  117.             if(result!=null){
  118.                 onDataFinishedListener.onDataSuccessfully(result);
  119.             }else{
  120.                 onDataFinishedListener.onDataFailed();
  121.             }
  122.         }

  123.         @Override
  124.         protected void onProgressUpdate(Integer... values) {
  125.             super.onProgressUpdate(values);
  126.         }
  127.          
  128.     }
  129. }
复制代码
代码
  1. 回调接口:
  2. public interface OnDataFinishedListener {
  3.      
  4.     public void onDataSuccessfully(Object data);
  5.      
  6.     public void onDataFailed();
  7.      
  8. }
复制代码
代码
  1. 第二种:使用handler:

  2. 1.修改ImageViewAsyncTask:
  3. public class ImageViewAsyncTask extends AsyncTask<String, Integer, Bitmap> {
  4.      
  5.     String mUrl;
  6.     Handler mHandler;
  7.      
  8.     public ImageViewAsyncTask(String url,Handler handler){
  9.         this.mUrl = url;
  10.         this.mHandler = handler;
  11.     }

  12.     @Override
  13.     protected Bitmap doInBackground(String... params) {
  14.         InputStream ins = null;
  15.         Bitmap bitmap = null;
  16.         try {
  17.             URL url = new URL(mUrl);
  18.             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  19.             if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){
  20.                 ins = connection.getInputStream();
  21.                 bitmap = BitmapFactory.decodeStream(ins);
  22.                 return bitmap;
  23.             }
  24.         } catch (MalformedURLException e) {
  25.             e.printStackTrace();
  26.         } catch (IOException e) {
  27.             e.printStackTrace();
  28.         }finally{
  29.             if(ins!=null){
  30.                 try {
  31.                     ins.close();
  32.                 } catch (IOException e) {
  33.                     e.printStackTrace();
  34.                 }
  35.             }
  36.         }
  37.         return null;
  38.     }

  39.     @Override
  40.     protected void onPreExecute() {
  41.         super.onPreExecute();
  42.     }

  43.     @Override
  44.     protected void onPostExecute(Bitmap result) {
  45.         super.onPostExecute(result);
  46.         Message msg = mHandler.obtainMessage();
  47.         if(result!=null){
  48.             msg.what = 1;
  49.             msg.obj = result;
  50.         }else{
  51.             msg.what = 2;
  52.         }
  53.         mHandler.sendMessage(msg);
  54.     }

  55.     @Override
  56.     protected void onProgressUpdate(Integer... values) {
  57.         super.onProgressUpdate(values);
  58.     }

  59.      
  60.      
  61. }
  62. 2.调用方式:
  63. ImageViewAsyncTask task2 = new ImageViewAsyncTask("http://static.oschina.net/uploads/ad/new_banner_one_ronglianyun_WrqUs.png", handler);
  64.         task2.execute();

  65. Handler handler = new Handler(){

  66.         @Override
  67.         public void handleMessage(Message msg) {
  68.             switch (msg.what) {
  69.             case 1:
  70.                 Bitmap bitmap = (Bitmap) msg.obj;
  71.                 im2.setImageBitmap(bitmap);
  72.                 break;

  73.             default:
  74.                 break;
  75.             }
  76.         }
  77.          
  78.     };
复制代码

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
发表于 2015-08-03 09:30 |显示全部楼层
楼主好功底

论坛徽章:
58
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2015-08-11 15:38 |显示全部楼层
确实有用的代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2021中国数据库技术大会

【数造未来】2021年10月18日-20日第十二届中国数据库技术大会
ITPUB、大会的会员您们好: 因目前国内疫情严峻,为响应北京市最新疫情防控要求,保障参会人员的健康和安全,组委会经协商决定:DTCC2021第十二届中国数据库技术大会延期至10月18日-20日(周一~周三)在北京国际会议中心举行,由此给各位带来的不便,敬请谅解!

大会官网
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP