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            @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)