1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        AndNetAndroid二次封裝的網(wǎng)絡(luò)框架

        聯(lián)合創(chuàng)作 · 2023-09-29 08:08

        AndNet

        AndNet是一個(gè)Android開(kāi)中中二次封裝的網(wǎng)絡(luò)框架,可以任意輕松切換使用的底層網(wǎng)絡(luò)請(qǐng)求框架,AndNet使用Parser-Callback模式,可以輕松實(shí)現(xiàn)從網(wǎng)絡(luò)請(qǐng)求到數(shù)據(jù)解析的整個(gè)操作步驟。

        AndNet的網(wǎng)絡(luò)請(qǐng)求框架默認(rèn)使用OkHttp,當(dāng)然你完全可以輕松的實(shí)現(xiàn)自己的請(qǐng)求操作并且替換,而你的業(yè)務(wù)邏輯代碼無(wú)需任何變動(dòng)。

        更新日志

        0.1.2版本更新

        1. 加入put、delete請(qǐng)求的支持

        2. 可直接post、put一段json

        3. cancel加入stack為空判斷


        0.1.1版本更新

        1. 加入debug

        2. 修復(fù)WeakReference帶來(lái)的問(wèn)題

        3. 重用網(wǎng)絡(luò)框架的cancel功能,加入tag標(biāo)識(shí)

        使用

        1 初始化

        public class App extends Application {
        
            @Override
            public void onCreate() {
                super.onCreate();
                OkHttpStack okHttpStack = new OkHttpStack();
                okHttpStack.debug(true);
                Net.init(okHttpStack);
        
            }
        }

        2 定義parser

        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;
            }
        }

        3 get請(qǐng)求

        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());

        4 post請(qǐng)求

        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());

        5 文件上傳

                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());

        cancel

        class MyActivity extend Activity {
        
            @Override
            public void onDestroy() {
                Net.cancel(getClass().getName());
            }
        }

        6 定制HttpStack

        public class VolleyStack<T> extends AbsHttpStack<T> {
        
            private Application mContext;
        
            public VolleyStack(Application context) {
                mContext = context;
            }
        
            /**
             * get請(qǐng)求
             *
             * @param url      網(wǎng)址
             * @param parser   解析器
             * @param callback 回調(diào)
             */
            @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請(qǐng)求
             *
             * @param url      訪(fǎng)問(wèn)的url
             * @param params   post參數(shù)
             * @param parser   解析器
             * @param callback 回調(diào)
             */
            @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);
            }
        
            /**
             * 執(zhí)行網(wǎng)絡(luò)請(qǐng)求
             *
             * @param url
             * @param params   post時(shí)請(qǐng)求的參數(shù) get時(shí)為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());
            }
        }

        更多內(nèi)容請(qǐng)操作實(shí)例代碼和博客:http://blog.csdn.net/qibin0506/article/details/50127223

        瀏覽 11
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            在线观看黄色小电影 | 久久夜色精品国产噜噜v6 | 乱妇熟女网 | 国产又好看的毛片 | 丁香5月激情 | 一级免费网站 | 九九九欧美 | 人人搞人人干 | 国产成人黄色在线观看 | 一级a爱视频 |