封装HttpUtil访问网络的耗时操作
来源:互联网 发布:stm32 压缩算法 编辑:程序博客网 时间:2024/06/05 16:42
当我们一个工程需要频繁的进行访问网络的耗时操作的时候就可以把方法封装成一个类以便使用时调用
首先要创建一个bean类,来区分是GET还是POST方法来请求网络
public String url=""; public String value=""; //默认为GET请求 public String method="GET"; //get请求 public RequestBean(String url) { this.url = url; } //post请求 public RequestBean(String url, String value, String method) { this.url = url; this.value = value; this.method = method; }
然后可以进行封装
//在activity中调用此方法,请求数据,并获取返回的数据; public void getDataFromServer(Context context, RequestBean bean, DataCallBack callBack){ MyHandler handler=new MyHandler(context,callBack); MyTask task=new MyTask(bean,handler); //获取CPU数量 int cpunum = Runtime.getRuntime().availableProcessors(); //线程池实例化 ExecutorService service = Executors.newScheduledThreadPool(cpunum + 1); //将子线程放入线程池执行; service.execute(task); } /** * 因为网络请求是耗时操作所以需要在线程里进行 * 这里创建一个内部类 继承Thread 重写run方法 */ class MyTask extends Thread{ private RequestBean requestBean; private MyHandler handler; public MyTask(RequestBean requestBean, MyHandler handler) { this.requestBean = requestBean; this.handler = handler; } @Override public void run() { super.run(); try { URL url=new URL(requestBean.url); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //判断是什么请求方式 if(requestBean.method.equals("POST")){ connection.setRequestMethod(requestBean.method); connection.setDoOutput(true); OutputStream outputStream = connection.getOutputStream(); outputStream.write(requestBean.value.getBytes()); } StringBuilder builder=new StringBuilder(); int code = connection.getResponseCode(); if(code==HttpURLConnection.HTTP_OK){ InputStream is = connection.getInputStream(); String str=""; BufferedReader reader=new BufferedReader(new InputStreamReader(is)); while ((str=reader.readLine())!=null){ builder.append(str); } } //利用 Message message=Message.obtain(); message.obj=builder.toString(); message.what=code; handler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); } } } /** * 请求的数据哟啊通过Handler接收 */ class MyHandler extends Handler{ private Context context; private DataCallBack callBack; public MyHandler(Context context, DataCallBack callBack) { this.context = context; this.callBack = callBack; } @Override public void handleMessage(Message msg) { super.handleMessage(msg); int what = msg.what; if(what==200){ String json= (String) msg.obj; callBack.prosseData(json); } else { Toast.makeText(context, "请求失败!", Toast.LENGTH_SHORT).show(); } } } public abstract interface DataCallBack{ public abstract void prosseData(String json); }
最后就是在需要请求数据的时候进行调用
//地址 String url= null; try { url = "http://japi.juhe.cn/comic/book?type="+ URLEncoder.encode(title, "utf-8")+"&key=4aa7945424c431ea9ac3edd39728cac9"; } catch (Exception e) { e.printStackTrace(); } //选择是什么方式请求数据 RequestBean requestBean=new RequestBean(url); new HttpUtil().getDataFromServer(Content_classify_Activity.this, requestBean, new HttpUtil.DataCallBack() { @Override public void prosseData(String json) { //json就是从网络上得到的json字符串 } });
要记得在xml文件里添加权限
阅读全文
1 0
- 封装HttpUtil访问网络的耗时操作
- Android网络请求HttpUtil封装工具类
- 第一讲-------------执行后台耗时操作的封装
- 执行后台耗时操作的封装-----改进版
- thinkphp 异步访问耗时操作
- OkHttp网络访问的封装
- 代码的耗时操作
- viewpager缓存页面,避免页面重新加载!如果每个页面中,有访问网络等耗时的操作,则用户体验会非常糟糕
- Android 对网络访问的封装
- 小程序网络访问的封装
- Android自定义的网络连接工具类HttpUtil
- Silverlight HttpUtil 封装Post调用
- IOS 开发进阶--多线程和网络--对于耗时操作的代码体验
- HttpUtil---网络请求工具类
- 网络请求工具类HttpUtil
- HttpUtil的小错误
- 自定义网络操作公共类 HttpUtil(接口回调机制)
- HttpUtil
- Angular CLI 安装和使用以及安装失败的解决方法
- python json
- JavaScript学习
- C/C++中extern关键字详解
- number one
- 封装HttpUtil访问网络的耗时操作
- (三)Vue.js v-for循环遍历 20170818
- 懒汉式的安全优化方式,两种方式。线程同时运行的时候,不会创建两个对象
- python—beautifulsoup介绍与安装使用
- Xmind-超链接
- 垃圾回收器与内存分配策略
- SQL左右连接中的on and和on where的区别
- FreeRtos内存管理
- sublime 3 与git 与github三者之间协调合作