首页 > 代码库 > Android简单封装类似JQuery异步请求
Android简单封装类似JQuery异步请求
在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 = http://www.mamicode.com/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 });
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。