zoukankan      html  css  js  c++  java
  • 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");
  • 相关阅读:
    react项目中如何解决同时需要多个请求问题
    jq+ajax+bootstrap改写一个动态分页的表格
    Window7+vs2008+QT环境搭建
    mssql charindex
    解决NTLDR is missing,系统无法启动的方法
    基于三汇语音卡的呼叫中心开发(一)
    Wince 或Windows平台 C#调用Bitmap对象后资源应该如何释放
    Anki:插件开发
    java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.ValueStack
    struts2中action之间的一种跳转
  • 原文地址:https://www.cnblogs.com/nanfei/p/8886029.html
Copyright © 2011-2022 走看看