在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 @Override
25 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 @Override
41 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 @Override
04 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 });

Android简单封装类似JQuery异步请求的更多相关文章

  1. 实现在Android简单封装类似JQuery异步请求

    在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作 ...

  2. Jquery Ajax简单封装(集中错误、请求loading处理)

    Jquery Ajax简单封装(集中错误.请求loading处理) 对Jquery Ajax做了简单封装,错误处理,请求loading等,运用到项目中集中处理会很方便. 技术层面没有什么好说的,请求是 ...

  3. jQuery异步请求(如getJSON)跨域解决方案

    相信大家在使用jQuery异步请求非自己网站内相对资源(通过别人站点上的URL直接读取)使经常会遇到如下错误吧,实际上这些错误都是浏览器安全机制“搞的鬼”,才让我们开发路上遇到了拦路虎. 当你直接在浏 ...

  4. jQuery异步请求模拟IE登录网站

    具体请求的登录验证页面后台逻辑处理,这里我们忽略,不在我们的学习范围内:关键的是使用jQuery异步请求方法,如下例子: <%@ Page Language="C#" Aut ...

  5. Android之封装好的异步网络请求框架

    1.简介  Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使 ...

  6. AJAX实现简单的注册页面异步请求

    p { margin: 0px; padding: 0px } AJAX简介 (1)AJAX = 异步 JavaScript 和 XML. (2)AJAX 是一种用于创建快速动态网页的技术. (3)通 ...

  7. Jquery异步请求简单实例(转)

    本文引用自Xingsoft. 一.Jquery向aspx页面请求数据 前台页面JS代码:             $("#Button1").bind("click&qu ...

  8. Android模仿jquery异步请求

    01 package com.xbl.task; 02   03 import java.io.BufferedReader; 04 import java.io.InputStream; 05 im ...

  9. Jquery异步请求数据实例

    一.Jquery向aspx页面请求数据 前台页面JS代码: $("#Button1").bind("click", function () { $.ajax({ ...

随机推荐

  1. 使用java开源工具httpClient及jsoup抓取解析网页数据

    今天做项目的时候遇到这样一个需求,需要在网页上展示今日黄历信息,数据格式如下 公历时间:2016年04月11日 星期一 农历时间:猴年三月初五 天干地支:丙申年 壬辰月 癸亥日 宜:求子 祈福 开光 ...

  2. jquery小技巧汇总 持续更新中

    1.jquery高亮当前选中菜单 $("document").ready(function(){ $(".menu li").click(function(){ ...

  3. Intellij IDEA开发第一个Android应用

    1.创建一个项目 File——>New Project——>.......——>Finish 2.创建模块 3.MyActivity.java package com.example ...

  4. mac 配置Python集成开发环境(Eclipse +Python+Pydev)

    1.下载Mac版64位的Eclipse. 进入到Eclipse官方网站的下载页面(http://www.eclipse.org/downloads/),我选择了下图所示的软件包, 浏览器在下载过程中使 ...

  5. (转载)高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENOB、分辨率、RMS、SFDR、THD、SINAD、dBFS、TWO-TONE IMD

    (一)一个基本概念 分贝(dB):按照对数定义的一个幅度单位.对于电压值,dB以20log(VA/VB)给出:对于功率值,以10log(PA/PB)给出.dBc是相对于一个载波信号的dB值:dBm是相 ...

  6. JavaEE5 Tutorial_Jsp,EL

      Jsp的各种元素在转化为servlet时处理是不一样的:指令,控制web容器如何处理页面脚本,被插入到生成的servlet里EL表达式,作为参数传递到解析器get/set Property,变成方 ...

  7. struts2类库下载

    struts2开发包下载 到http://struts.apache.org/download.cgi#struts2014下载struts-2.x.x-all.zip,目前最新版为2.1.6.下载完 ...

  8. 《学习OpenCV》练习题第四章第七题abc

    题外话:一直是打算把这本书的全部课后编程题写完的,中间断了几个月,一直忙于其他事.现在开始补上. 这道题我不清楚我理解的题意是不是正确的,这道题可以练习用OpenCV实现透视变换(可以用于矫正在3维环 ...

  9. 第二百二十四天 how can I 坚持

    实物商品兑换,有点小难搞,其实也没什么难的,也就那些东西,不过好像这就是我设计实现的,干起来挺来劲的. 供暖了,挺暖和的,哈哈. 小米耳机(炫彩版)到了.感觉挺好的. 还在纠结到底要买哪种颜色的羽绒服 ...

  10. [iOS微博项目 - 2.2] - 在app中获取授权

    github: https://github.com/hellovoidworld/HVWWeibo   A.发送授权请求 1.使用UIWebView加载请求页面 自定义一个继承UIViewContr ...