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

package com.xbl.task;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors
<P>import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log public class JQuery { private static final String KEY = "key";
private static String TAG = "JQuery";
private static final int N = 5;// 5个工人
private static final Executor worker = Executors.newFixedThreadPool(N);// 线程池
private static final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
TaskListener listener = (TaskListener)msg.obj;
Object result = msg.getData();
if(listener !=null ){
listener.callBack(result);
}
destory();
}
}; private JQuery(){
} public static void execute(final String url,final TaskListener listener){
worker.execute(new Runnable() {
@Override
public void run() {
String result = null;
try {
result = WebUtil.get(url);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
} Message msg = new Message();
Bundle data = new Bundle();
data.putSerializable(KEY, result);
msg.setData(data);
msg.obj = listener;
handler.sendMessage(msg);
}
});
} //销毁线程
private static void destory() {
if (worker != null && worker instanceof ExecutorService) {
ExecutorService es = (ExecutorService) worker;
if (!es.isShutdown()) {
es.shutdown();
}
}
} public interface TaskListener{
public void callBack(Object result);
}
/**
*
* 不必太在意此处代码,只是示例
*
*/
public static class WebUtil{ public static String get(String url) throws Exception{
InputStream inputStream = new URL(url).openStream();
StringBuilder strBuilder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
for (String s = reader.readLine(); s != null; s = reader.readLine())
strBuilder.append(s); inputStream.close();
return strBuilder.toString();
}
}
}

[Java]代码

//调用方法:
JQuery.execute("http://weather.news.qq.com/inc/minisite_125.js", new JQuery.TaskListener() {
@Override
public void callBack(Object result) {
TextView t = new TextView(TaskDemoActivity.this);
t.setText(String.valueOf(result));
LinearLayout layout = (LinearLayout)findViewById(R.id.layout1);
layout.addView(t);
}
});

详细说明:http://android.662p.com/thread-239-1-1.html

实现在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. Android模仿jquery异步请求

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

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

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

  9. Jquery异步请求数据实例

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

随机推荐

  1. JAVA 继承 extends

    /* 继承 1.提高了代码的复用性,简化了代码 2.让类与类之间产生了继承关系,才有了后面的多态的特性的存在 注意:千万不要为了获取其它类的功能简化代码,而建立继承关系, 必须要类与类之间存在继承关系 ...

  2. java的枚举

    package com.wzh.test.enum0; import org.junit.Test; public class demo1 { @Test public void testAb(){ ...

  3. Objective-C: 字符串NSString与NSMutableString

    字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就 ...

  4. 协处理器CP15

    在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的.ARM处理器使用协处理器15(CP15)的寄存器来控制cache.TCM和存储器管理.CP15包含16个32位的寄存器 ...

  5. *(volatile unsigned long *) 语法

    #define GPJ2CON (*(volatile unsigned long *) 0xE0200280) 开始对于上面的语法不太理解,但通过拆分,我们可以看的更明白: 1.(unsigned ...

  6. JMeter中3种参数值的传递

    小伙伴们在使用JMeter的过程中,肯定会遇到参数值传递的问题,下面来和大家总结下,在使用JMeter做压力测试的时候,常见的3种参数值的传递是怎样的. (一)从CSV文件读取要批量输入的变量 假如我 ...

  7. 利用Hadoop实现超大矩阵相乘之我见(二)

    前文 在<利用Hadoop实现超大矩阵相乘之我见(一)>中我们所介绍的方法有着“计算过程中文件占用存储空间大”这个缺陷,本文中我们着重解决这个问题. 矩阵相乘计算思想 传统的矩阵相乘方法为 ...

  8. 给a标签herf属性赋值时,必须加http://

    新建一个web工程,FirstWeb,在其中新建一个页面:test.jsp <%@ page language="java" contentType="text/h ...

  9. java 数据结构

    二叉树: 存储结构:顺序存储结构和链式存储结构 二叉树的先根遍历的递归与非递归算法 二叉树的中根遍历的递归与非递归算法 二叉树的后根遍历的递归与非递归算法 二叉树的层次遍历的递归与非递归算法 e.g. ...

  10. Android--创建进度框ProgressDialog

    1.布局文件progress_dialog_activity.xml <?xml version="1.0" encoding="utf-8"?> ...