实现在Android简单封装类似JQuery异步请求
在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异步请求的更多相关文章
- Android简单封装类似JQuery异步请求
在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作 ...
- Jquery Ajax简单封装(集中错误、请求loading处理)
Jquery Ajax简单封装(集中错误.请求loading处理) 对Jquery Ajax做了简单封装,错误处理,请求loading等,运用到项目中集中处理会很方便. 技术层面没有什么好说的,请求是 ...
- jQuery异步请求(如getJSON)跨域解决方案
相信大家在使用jQuery异步请求非自己网站内相对资源(通过别人站点上的URL直接读取)使经常会遇到如下错误吧,实际上这些错误都是浏览器安全机制“搞的鬼”,才让我们开发路上遇到了拦路虎. 当你直接在浏 ...
- jQuery异步请求模拟IE登录网站
具体请求的登录验证页面后台逻辑处理,这里我们忽略,不在我们的学习范围内:关键的是使用jQuery异步请求方法,如下例子: <%@ Page Language="C#" Aut ...
- Android之封装好的异步网络请求框架
1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使 ...
- AJAX实现简单的注册页面异步请求
p { margin: 0px; padding: 0px } AJAX简介 (1)AJAX = 异步 JavaScript 和 XML. (2)AJAX 是一种用于创建快速动态网页的技术. (3)通 ...
- Android模仿jquery异步请求
01 package com.xbl.task; 02 03 import java.io.BufferedReader; 04 import java.io.InputStream; 05 im ...
- Jquery异步请求简单实例(转)
本文引用自Xingsoft. 一.Jquery向aspx页面请求数据 前台页面JS代码: $("#Button1").bind("click&qu ...
- Jquery异步请求数据实例
一.Jquery向aspx页面请求数据 前台页面JS代码: $("#Button1").bind("click", function () { $.ajax({ ...
随机推荐
- ubuntu 关机,重启,注销命令
1关机命令 shutdown 好像ubuntu的终端中默认的是当前用户的命令,只是普通用户,因此在终端器中可以使用sudo -sh 转换到管理员root用户下执行命令. 1)shutdown –hel ...
- Spring中依赖注入的使用和配置
使用方法1: //在执行此实例化的时候就会完成所有注入 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( ...
- android-Service和Thread的区别
1.服务不是单一的进程.服务没有自己的进程,应用程序可以不同,服务运行在相同的进程中. 2.服务不是线程.可以在线程中工作. 一.在应用中,如果是长时间的在后台运行,而且不需要交互的情况下,使用服务. ...
- UIActionSheet 传值
#pragma mark - actionSheet - (void)shareOrder:(NSDictionary *)product { UIActionSheet *as = [[UIActi ...
- 8 个 Git 的小技巧
git 已经成为了我日常必备工具之一,我总结我几乎每天使用的8个有用(且简洁)的git技巧. 使用-p选择性添加 当你想提交内容时,你可以通过使用 git commit -am 来选择所有文件或使 ...
- mac下Android开发环境搭建
之前一段时间在学习ios的开发,近一段时间想着也接触下Android开发,以来加深对移动端开发的理解.这里根据自己配置Android开发环境的过程,比较详细的来总结下自己的安装过程,希望对一些正准备配 ...
- linux内核设计与实现--进程管理
进程就是出于执行期的程序.进程的另一个名字是任务. 执行线程,简称线程(thread),是在进程中活动的对象.每个线程都有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度的对象是线程,而不是进程 ...
- CentOS 6 安装 Python3.5以及配置Django
http://www.jianshu.com/p/6199b5c26725 文/FiveStrong(简书作者)原文链接:http://www.jianshu.com/p/6199b5c26725著作 ...
- Sqlserver中存储过程,触发器,自定义函数
Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...
- nyoj 99 单词拼接
点击打开链接 单词拼接 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串. 前一个单词的结尾应该与下一个单词的道字母相同 ...