博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android简单封装类似JQuery异步请求
阅读量:7044 次
发布时间:2019-06-28

本文共 3811 字,大约阅读时间需要 12 分钟。

在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作,会有溢出的问题,(当然一般情况不会有那么多线程同时工作的)所以写了这个代码,还望高手指正!

[Java]代码01    package com.xbl.task;02     03    import java.io.BufferedReader;04    import java.io.InputStream;05    import java.io.InputStreamReader;06    import java.net.URL;07    import java.util.concurrent.Executor;08    import java.util.concurrent.ExecutorService;09    import java.util.concurrent.Executors;10     11    import android.os.Bundle;12    import android.os.Handler;13    import android.os.Message;14    import android.util.Log;15     16     17    public class JQuery {18        19        private static final String KEY = "key";20        private static String TAG = "JQuery";21        private static final int N = 5;// 5个工人 22        private static final Executor worker = Executors.newFixedThreadPool(N);// 线程池23        private static final Handler handler = new Handler(){24            @Override25            public void handleMessage(Message msg) {26                TaskListener listener = (TaskListener)msg.obj;27                Object result = msg.getData();28                if(listener !=null ){29                    listener.callBack(result);30                }31                destory();32            }33        };34        35        private JQuery(){      36        }37        38        public static void execute(final String url,final TaskListener listener){39            worker.execute(new Runnable() {40                @Override41                public void run() {42                    String result = null;43                    try {44                        result = WebUtil.get(url);45                    } catch (Exception e) {46                        Log.e(TAG, e.getMessage());47                    }48                    49                    Message msg = new Message();50                    Bundle data = new Bundle();51                    data.putSerializable(KEY, result);52                    msg.setData(data);53                    msg.obj = listener;54                    handler.sendMessage(msg);55                }56            });57        }58        59        //销毁线程60        private static void destory() {61            if (worker != null && worker instanceof ExecutorService) {62                ExecutorService es = (ExecutorService) worker;63                if (!es.isShutdown()) {64                    es.shutdown();65                }66            }67        }  68        69        public interface TaskListener{70            public void callBack(Object result);71        }72        /**73         *74         * 不必太在意此处代码,只是示例75         *76         */77        public static class WebUtil{78            79            public static String get(String url) throws Exception{80                InputStream inputStream = new URL(url).openStream();81                StringBuilder strBuilder = new StringBuilder();82                BufferedReader reader = new BufferedReader(newInputStreamReader(inputStream));83                for (String s = reader.readLine(); s != null; s = reader.readLine())84                    strBuilder.append(s);85                86                inputStream.close();87                return strBuilder.toString();88            }89        }90    }[代码] [Java]代码01    //调用方法:02    JQuery.execute("http://weather.news.qq.com/inc/minisite_125.js", newJQuery.TaskListener() {               03                    @Override04                    public void callBack(Object result) {05                        TextView t = new TextView(TaskDemoActivity.this);06                        t.setText(String.valueOf(result));07                        LinearLayout layout = (LinearLayout)findViewById(R.id.layout1);08                        layout.addView(t);09                    }10                });

 

转载地址:http://asqal.baihongyu.com/

你可能感兴趣的文章
oc83--自定义类实现copy方法
查看>>
What's New in iOS7,iOS7新特性介绍
查看>>
电源管理里的休眠选项卡没了
查看>>
Xshell高级后门完整分析报告
查看>>
sphinx是支持结果聚类的
查看>>
PL/SQLDeveloper导入导出Oracle数据库方法
查看>>
救人一命是怎样的体验?
查看>>
php如何妩媚地生成执行的sql语句
查看>>
搜索引擎收录提交入口
查看>>
MongoDB简单实践:Only CRUD
查看>>
C语言杂谈——预处理程序
查看>>
如何从TFS中删除团队项目
查看>>
C++中的指针与引用
查看>>
Java取得操作系统的临时目录
查看>>
Visual Studio 2017 15.5.0 正式发布 正式版下载
查看>>
2.2 Consumer API官网剖析(博主推荐)
查看>>
[转]js日期时间函数(经典+完善+实用)
查看>>
iBATIS In Action:iBATIS的安装和配置
查看>>
endl用法
查看>>
关于Java基本数据类型
查看>>