• android两种方式获取AsyncTask返回值


    获取AsyncTask返回值,在Activity中使用。

    引用链接:https://www.oschina.net/code/snippet_725438_49858#72630

    [1].[代码] [Java]代码 跳至 [1] [2] [3] [4]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    布局文件:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
       >
        
       <ImageView android:id="@+id/im1"
          android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@drawable/ic_launcher" />
        
        <ImageView android:id="@+id/im2"
          android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@drawable/ic_launcher" />
     
    </LinearLayout>
     

    [2].[代码] [Java]代码 跳至 [1] [2] [3] [4]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    2.第一种,回调方法方式:
    package com.androidwallpaper;
     
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
     
    import android.net.Uri;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.app.WallpaperManager;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    import android.widget.Toast;
     
    public class MainActivity extends Activity implements OnClickListener{
         
         
        ImageView im1;
        ImageView im2;
         
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
             
            im1 = (ImageView) findViewById(R.id.im1);
            im2 = (ImageView) findViewById(R.id.im2);
             
            try {
                final ImageViewAsyncTask task = new ImageViewAsyncTask("http://static.oschina.net/uploads/ad/new_banner_one_ronglianyun_WrqUs.png");
                task.setOnDataFinishedListener(new OnDataFinishedListener() {
                     
                    @Override
                    public void onDataSuccessfully(Object data) {
                        try {
                            im1.setImageBitmap((Bitmap) data);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    @Override
                    public void onDataFailed() {
                        Toast.makeText(MainActivity.this, "加载失败!", Toast.LENGTH_SHORT).show();
                    }
                });
                task.execute();
            } catch (Exception e) {
                e.printStackTrace();
            }
             
             
             
        }
     
         
        class ImageViewAsyncTask extends AsyncTask<String, Integer, Bitmap> {
             
            String mUrl;
            OnDataFinishedListener onDataFinishedListener;
             
            public ImageViewAsyncTask(String url){
                this.mUrl = url;
            }
             
             
     
            public void setOnDataFinishedListener(
                    OnDataFinishedListener onDataFinishedListener) {
                this.onDataFinishedListener = onDataFinishedListener;
            }
     
     
            @Override
            protected Bitmap doInBackground(String... params) {
                InputStream ins = null;
                Bitmap bitmap = null;
                try {
                    URL url = new URL(mUrl);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){
                        ins = connection.getInputStream();
                        bitmap = BitmapFactory.decodeStream(ins);
                        return bitmap;
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally{
                    if(ins!=null){
                        try {
                            ins.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
                return null;
            }
     
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressBar.setVisibility(View.VISIBLE);
            }
     
            @Override
            protected void onPostExecute(Bitmap result) {
                progressBar.setVisibility(View.GONE);
                if(result!=null){
                    onDataFinishedListener.onDataSuccessfully(result);
                }else{
                    onDataFinishedListener.onDataFailed();
                }
            }
     
            @Override
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);
            }
             
        }
    }
     

    [3].[代码] [Java]代码 跳至 [1] [2] [3] [4]

    1
    2
    3
    4
    5
    6
    7
    8
    回调接口:
    public interface OnDataFinishedListener {
         
        public void onDataSuccessfully(Object data);
         
        public void onDataFailed();
         
    }
     

    [4].[代码] [Java]代码 跳至 [1] [2] [3] [4]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    第二种:使用handler:
     
    1.修改ImageViewAsyncTask:
    public class ImageViewAsyncTask extends AsyncTask<String, Integer, Bitmap> {
         
        String mUrl;
        Handler mHandler;
         
        public ImageViewAsyncTask(String url,Handler handler){
            this.mUrl = url;
            this.mHandler = handler;
        }
     
        @Override
        protected Bitmap doInBackground(String... params) {
            InputStream ins = null;
            Bitmap bitmap = null;
            try {
                URL url = new URL(mUrl);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){
                    ins = connection.getInputStream();
                    bitmap = BitmapFactory.decodeStream(ins);
                    return bitmap;
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(ins!=null){
                    try {
                        ins.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
     
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }
     
        @Override
        protected void onPostExecute(Bitmap result) {
            super.onPostExecute(result);
            Message msg = mHandler.obtainMessage();
            if(result!=null){
                msg.what = 1;
                msg.obj = result;
            }else{
                msg.what = 2;
            }
            mHandler.sendMessage(msg);
        }
     
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }
     
         
         
    }
    2.调用方式:
    ImageViewAsyncTask task2 = new ImageViewAsyncTask("http://static.oschina.net/uploads/ad/new_banner_one_ronglianyun_WrqUs.png", handler);
            task2.execute();
     
    Handler handler = new Handler(){
     
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case 1:
                    Bitmap bitmap = (Bitmap) msg.obj;
                    im2.setImageBitmap(bitmap);
                    break;
     
                default:
                    break;
                }
            }
             
        };
  • 相关阅读:
    Eureka 服务的注册和发现
    springcloud 中文文档
    mysql 7 种 join
    通用 mapper
    docker 容器操作( 以 tomcat 为例 )
    linux下安装phpunit简单方法
    图片优化的几个小工具
    安装基准测试工具sysbench
    安装pcntl以实现php多进程
    安装memcache及php的memcached模块
  • 原文地址:https://www.cnblogs.com/yzycoder/p/6103463.html
Copyright © 2020-2023  润新知