• Android 异步请求通用类


    package com.example.demo1;
    
    import java.util.EventListener;
    
    public interface MyAsyncTaskListener extends EventListener 
    {
        public Object Task(Object... parameters);
        public void TaskCompleted(Object result);
    }
    package com.example.demo1;
    
    import android.os.AsyncTask;
    
    public class MyAsyncTask extends AsyncTask<Object, Void, Object> {
        
        private MyAsyncTaskListener myAsyncTaskListeners = null;
        
        @Override
        protected Object doInBackground(Object... params) {
            if(myAsyncTaskListeners != null)
                return myAsyncTaskListeners.Task(params);
            else
                return null;
        }
    
        @Override
        protected void onPostExecute(Object result) {
            if(myAsyncTaskListeners != null)
                myAsyncTaskListeners.TaskCompleted(result);
        }
        
        public void setAsyncTaskListener(MyAsyncTaskListener listener)
        {
            myAsyncTaskListeners = listener;
        }
    }
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            StrictMode.setThreadPolicy(new 
                    StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
                            StrictMode.setVmPolicy(
                    new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
            
                            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
            final ImageView image = (ImageView)this.findViewById(R.id.image);
            
            MyAsyncTask task = new MyAsyncTask();
            task.setAsyncTaskListener(new MyAsyncTaskListener() {
                @Override
                public Object Task(Object... parameters) {
                    try {
                        File file = downloadFile(parameters[0].toString());
                        TiffDecoder.nativeTiffOpen(file.getPath());
                        int[] pixels = TiffDecoder.nativeTiffGetBytes();
                        Bitmap mBitmap = Bitmap.createBitmap(pixels, TiffDecoder.nativeTiffGetWidth(), TiffDecoder.nativeTiffGetHeight(),Bitmap.Config.ARGB_8888);
                        TiffDecoder.nativeTiffClose();
                        return mBitmap;
                    } catch (IOException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
                    return null;
                }
    
                @Override
                public void TaskCompleted(Object result) {
                    if(result == null)
                        return;
                    
                    image.setImageBitmap((Bitmap)result);
                }
            });   
            
            task.execute("http://xibei1-image.jfdedu.com/00006009b4673bbc-ff2a-49bd-91fe-764c01b2acce01.tif");
        }
    
    private File downloadFile(String strUrl) throws IOException
        {
            URL url = new URL(strUrl);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            urlConnection.connect();
            
            File file = File.createTempFile("myfile", ".tif", this.getCacheDir());
            if(file.exists())
                file.delete();
            file.createNewFile();
    
            FileOutputStream fileOutput = new FileOutputStream(file);
            InputStream inputStream = urlConnection.getInputStream();
            byte[] buffer = new byte[1024];
            int bufferLength = 0;
            while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                fileOutput.write(buffer, 0, bufferLength);
            }
            fileOutput.close();
            return file;
        }

     上面的示例干扰代码比较多,其实这个类的使用方法是这样的:

               MyAsyncTask task = new MyAsyncTask();
    //定义了一个匿名类,这个匿名类继承了接口MyAsyncTaskListener,并且实例化了这个匿名类型的一个实例,传递给接口方法。 task.setAsyncTaskListener(
    new MyAsyncTaskListener() { @Override public Object Task(Object... parameters) { //执行耗时操作并返回结果 } @Override public void TaskCompleted(Object result) { //接收并使用异步请求结果 } }); //开始异步请求 task.execute("http://xibei1-image.jfdedu.com/00006009b4673bbc-ff2a-49bd-91fe-764c01b2acce01.tif");
  • 相关阅读:
    程序设计实习课(0)资源链接
    解决clion2016.3不能支持搜狗输入法的问题
    四元数运动学笔记(5)IMU驱动的运动误差方程
    四元数运动学笔记(4)旋转的雅克比矩阵
    四元数运动学笔记(3)四元数和旋转相关的约定表述
    四元数运动学笔记(2)旋转向量,旋转矩阵和四元数的关系
    单应矩阵,基本矩阵,本质矩阵
    ROS标定IDS相机
    四元数运动学笔记(1)旋转的表示
    IMU Noise Model
  • 原文地址:https://www.cnblogs.com/nanfei/p/8886029.html
Copyright © 2020-2023  润新知