AndNet是一个Android开中中二次封装的网络框架,可以任意轻松切换使用的底层网络请求框架,AndNet使用Parser-Callback模式,可以轻松实现从网络请求到数据解析的整个操作步骤。
AndNet的网络请求框架默认使用OkHttp,当然你完全可以轻松的实现自己的请求操作并且替换,而你的业务逻辑代码无需任何变动。
加入put、delete请求的支持
可直接post、put一段json
cancel加入stack为空判断
加入debug
修复WeakReference带来的问题
重用网络框架的cancel功能,加入tag标识
public class App extends Application { @Override public void onCreate() { super.onCreate(); OkHttpStack okHttpStack = new OkHttpStack(); okHttpStack.debug(true); Net.init(okHttpStack); } }
public class CommParser<T> implements Net.Parser<T> { private String mKey; public CommParser(String key) { mKey = key; } @Override public Result<T> parse(String response) { Result<T> result = new Result<T>(); try { JSONObject baseObject = JSON.parseObject(response); if(!baseObject.getBooleanValue("success")) { result.setMsg(baseObject.getString("message")); }else { Class<T> klass = Helper.generateType(getClass()); if(klass == null) throw new Exception(); T t = baseObject.getObject(mKey, klass); result.setStatus(Result.SUCCESS); result.setResult(t); return result; } } catch (Exception e) { e.printStackTrace(); result.setMsg(Net.ERR_PARSE_MSG); } result.setStatus(Result.ERROR); return result; } }
Net.get("http://192.168.3.116/?name=loader&age=18&city=jinan", new CommParser<User>("user") {}, new Net.Callback<User>() { @Override public void callback(Result<User> result) { if(result.getStatus() == Result.SUCCESS) { User user = result.getResult(); mTextView.setText(user.getName()); mTextView.append("\n" + user.getAge()); mTextView.append("\n" + user.getCity()); }else { mTextView.setText(result.getMsg()); } } }, getClass().getName());
User user = new User(); user.setName("qibin"); user.setCity("shandong"); user.setAge(18); Net.post("http://192.168.3.116/", user, new CommParser<User>("user") { }, new Net.Callback<User>() { @Override public void callback(Result<User> result) { if(result.getStatus() == Result.SUCCESS) { mTextView.setText(result.getResult().toString()); }else { mTextView.setText(result.getMsg()); } } }, getClass().getName());
RequestParams params = new RequestParams("name", "qibin"); params.add("file", new File(Environment.getExternalStorageDirectory() + "/dl.jar")); Net.post("http://192.168.3.116/upload.php", params, new Net.NoParser(), new Net.Callback<String>() { @Override public void callback(Result<String> result) { mTextView.setText(result.getResult() + ""); } }, getClass().getName());
class MyActivity extend Activity { @Override public void onDestroy() { Net.cancel(getClass().getName()); } }
public class VolleyStack<T> extends AbsHttpStack<T> { private Application mContext; public VolleyStack(Application context) { mContext = context; } /** * get请求 * * @param url 网址 * @param parser 解析器 * @param callback 回调 */ @Override public void get(String url, Net.Parser<T> parser, Net.Callback<T> callback, final Object tag) { invoke(Request.Method.GET, url, null, parser, callback, tag); } /** * post请求 * * @param url 访问的url * @param params post参数 * @param parser 解析器 * @param callback 回调 */ @Override public void post(String url, RequestParams params, Net.Parser<T> parser, Net.Callback<T> callback, final Object tag) { invoke(Request.Method.POST, url, params, parser, callback, tag); } /** * 执行网络请求 * * @param url * @param params post时请求的参数 get时为null * @param parser * @param callback * @param method */ private void invoke(final int method, final String url, final RequestParams params, final Net.Parser<T> parser, final Net.Callback<T> callback, final Object tag) { StringRequest request = new StringRequest(method, url, new Response.Listener<String>() { public void onResponse(String response) { onNetResponse(parser, callback, response); } }, new Response.ErrorListener() { public void onErrorResponse(VolleyError error) { error.printStackTrace(); onError(callback, Net.DEF_ERR_MSG); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { if (params != null) return params.get(); return super.getParams(); } }; VolleyManager.getInstance(mContext).add(request, tag); } @Override public void cancel(Object tag) { VolleyManager.getInstance(mContext).cancel(tag); } } public class App extends Application { @Override public void onCreate() { super.onCreate(); Net.init(new VolleyStack(this)); // Net.init(new OkHttpStack()); // Net.init(new OkHttpHeaderStack()); } }
更多内容请操作实例代码和博客:http://blog.csdn.net/qibin0506/article/details/50127223
吐槽 我们做移动开发的,网络操作可以说是最最常用的技术了,而在网络操作中http又是一块最常见的的方式,返回json的http请求可以说是我们日常最长干的活。你一般用什么框架去请求http呢?Volley?OkHttp? 不管哪种方式用起来是不是还是不那么的方便,我们依然要写大量的请求、解析、返回的代码。好,这篇博客,不是让你替换掉你最常用的那个网络框架,而是在你熟悉的框架之上二次封装!目的就是为
AndNet AndNet是一个Android开中中二次封装的网络框架,可以任意轻松切换使用的底层网络请求框架,AndNet使用Parser-Callback模式,可以轻松实现从网络请求到数据解析的整个操作步骤。 AndNet的网络请求框架默认使用OkHttp,当然你完全可以轻松的实现自己的请求操作并且替换,而你的业务逻辑代码无需任何变动。 更新日志 0.1.2版本更新 加入put、delete请
项目:乐优商城 问题:net.sf.jsqlparser.statement.select.PlainSelect.getGroupByColumnReferences()Ljava/util/List; 解决:导入依赖 <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</art
本文向大家介绍Android基于OkHttpUtils网络请求的二次封装,包括了Android基于OkHttpUtils网络请求的二次封装的使用技巧和注意事项,需要的朋友参考一下 OkHttpUtils网络请求为什么进行二次封装? 1、减少代码量 2、后期换网络处理框架方便 二次封装的实现原理 1、将网络请求提取在一个方法中 2、对里面的可变参数,可以通过参数传递过去,也可以提供一个set方法传递
本文向大家介绍Flutter 网络请求框架封装详解,包括了Flutter 网络请求框架封装详解的使用技巧和注意事项,需要的朋友参考一下 Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient、第三方网络请求 http以及 Flutter 中的 Dio。我们可以比较一下这三种网络请求方式,然后封装为我们方便请求网络的工具类。
本文向大家介绍Angular网络请求的封装方法,包括了Angular网络请求的封装方法的使用技巧和注意事项,需要的朋友参考一下 很多时候,我很喜欢angular的编码风格,特别是angular支持typescript之后,完整的生命周期,完美的钩子函数,都是别的语言所无法替代的。 这里我来说说我自己的网络请求封装,某种意义上来说,angular自己的网络请求封装的很好的,我们没有必要再来画蛇添足,
关于 axios 二次封装方法的问题 通过 class 创建多个实例 仅通过 axios 创建一个实例 哪种方法更好些呢?或者大家有更好的封装思路吗? 看了一些博客,关于用 class 包装的 axios, 给出来的好处是 不同的服务可以加不同的拦截器,我刚工作不久,不知道有什么场景需要用到这种需求。我更偏向于第二种方法,感觉我接触到的服务,只需要切换一下 baseUrl,并没有别的需求了。
本文向大家介绍vue axios 二次封装的示例代码,包括了vue axios 二次封装的示例代码的使用技巧和注意事项,需要的朋友参考一下 这段时间告诉项目需要,用到了vue。 刚开始搭框架的时候用的是vue-resource后面看到官方推荐axios就换过来了 顺便封装了一下 说明 1、为防止发起请求时,当前正在进行的相同请求,在请求拦截器中加入了hash判断,将相同请求url拦截 2、将axi
本文向大家介绍关于ajax网络请求的封装实例,包括了关于ajax网络请求的封装实例的使用技巧和注意事项,需要的朋友参考一下 实例代码: 以上这篇关于ajax网络请求的封装实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
本文向大家介绍vue中axios的二次封装实例讲解,包括了vue中axios的二次封装实例讲解的使用技巧和注意事项,需要的朋友参考一下 我们做项目时,虽然axios也可以直接拿来用,但是对接口比较零散,不太好进行维护,也会产生大量的重复代码,所以我在这对axios进行了统一接口处理 第一步,先在src中的公共文件夹中如utils里新建request.js文件 代码解读: 将接口统一放到单独的文
其实这一小节完全可以放到上一个小节,只是这里用了完全不同的玩法,所以我还是决定单拿出来分享一下这方面的小细节。 上一小节有关订阅部分的代码,请看: function _M.subscribe( self, channel ) local redis, err = redis_c:new() if not redis then return nil, err