NoHttp網絡請求框架簡析——Android網絡請求(二)

題記——java

        靜坐窗前,與明月爲伴。緩存

        每一天都是一個新的開始,每一天都是一個新的心態,每一天的目標都是品好每一杯白開水。服務器

        生活的價值是活的有意義,而活的有意義就是生命的折騰。網絡

 

在功夫的世界中,惟快不破,在移動的世界中,一樣是惟快不破。async

在功夫的世界中,最高境界就是無招,那麼在移動的世界中,就是一行代碼搞定一切。ide

Nohttp一個大神所創的一行代碼搞定一個網絡請求。ui

 

1 、開啓傳奇體驗之路 ——Nohttp的基本使用步驟

 

2.Post提交參數String響應請求

在網絡請求的世界中,解析JSON數據已經是一種常態,而JSON只是一個Stringurl

/**
     * Post請求,返回的數據類型爲String
     * @param url      請求服務器地址
     * @param what     請求服務標識
     * @param map      請求參數添加
     * @param listener 響應結果監聽
     */
    public void asyncPostStringRequest(String url, int what,
                                       Map<String, String> map,
                                       OnResponseListener<String> listener) {
        /**
         * 取消隊列中已開始的請求
         */
        mRequestQueue.cancelBySign(what);
        /**
         * 建立請求對象
         */
        Request<String> request =
                NoHttp.createStringRequest(url, RequestMethod.POST);

        /**
         * 添加請求參數
         */
        if (map != null) {
            for (Map.Entry<String, String> entry : map.entrySet()) {
                if (entry.getKey() != null) {
                    request.add(entry.getKey(), entry.getValue());
                }
            }
        }

        /**
         * 設置取消請求標識
         */
        request.setCancelSign(what);

        /**
         * what: 當多個請求同時使用同一個OnResponseListener時用來區分請求, 相似handler的what同樣
         * request: 請求對象
         * onResponseListener 回調對象,接受請求結果
         */
        mRequestQueue.add(what, request, listener);
    }

使用方法:spa

//請求連接
        String url = "http://172.19.1.77:8080/OkhttpAppLication/test";
        //請求網絡標識
        final int strUrlTag = 12;
        //請求參數
        Map<String,String> map = new HashMap<>();
        map.put("username","admiin");
        map.put("password","122345");
        //調用請求
        NohttpUtils.getIntanse(getApplication())
                .asyncPostStringRequest(urls,
                        strUrlTag,map,
                        new SimpleResponseListener<String>() {
            @Override
            public void onSucceed(int what, Response<String> response) {
                /**
                 * 請求成功接收服務器返回內容
                 */
                String respose = response.get();
            }

            @Override
            public void onFailed(int what, String url,
                                 Object tag, Exception exception,
                                 int responseCode, long networkMillis) {
                /**
                 * 請求失敗
                 */
            }
        });


3.Post提交參數加載圖片

/**
     * 加載圖片的網絡請求
     * @param url      請求網絡服務器地址
     * @param what     請求網絡標識
     * @param listener 請求網絡響應監聽
     */
    public void asyncLoadImage(String url, int what, OnResponseListener<Bitmap> listener) {
        /**
         * 建立請求對象
         */
        Request<Bitmap> imageRequest = NoHttp.createImageRequest(url);
        imageRequest.setTag(what);
        /**
         * 設置先加載緩存,若是沒有緩存,再去加載網絡
         */
        imageRequest.setCacheMode(CacheMode.NONE_CACHE_REQUEST_NETWORK);
        /**
         * 設置取消請求標識
         */
        imageRequest.setCancelSign(what);
        /**
         * 發起請求
         */
        mRequestQueue.add(what, imageRequest, listener);
    }

使用方法:.net

final String urlimage ="http://pic55.nipic.com/file/20141208/19462408_171130083000_2.jpg";
        final ImageView imageView = (ImageView) findViewById(R.id.imageviews);
        final int imagTag = 34;

        NohttpUtils.getIntanse(getApplication())
                .asyncLoadImage(urlimage, imagTag, new SimpleResponseListener<Bitmap>() {
            @Override
            public void onSucceed(int what, Response<Bitmap> response) {
             imageView.setImageBitmap(response.get());
            }

            @Override
            public void onFailed(int what, String url,
                                 Object tag, Exception exception,
                                 int responseCode, long networkMillis) {

            }
        });

 


4.下載文件

/**
     * @param url      請求服務器連接
     * @param what     請求服務標識
     * @param map      請求參數封裝
     * @param filePath 下載文件的保存路徑與文件名
     * @param listener 下載監聽
     */
    public void asyncDownFileRequest(String url, int what,
                                     Map<String, String> map,
                                     String filePath, DownloadListener listener) {

        /**
         * url 下載服務器地址
         * RequestMethod.POST 發送請求方式
         * Environment.getExternalStorageDirectory().getPath() 文件下載保存路徑
         * filePath 文件下載保存名稱
         * true 支持斷點下載
         * false 不覆蓋已有的相同文件名稱的文件
         */
        DownloadRequest downloadRequest
                = NoHttp.createDownloadRequest(url,
                                                RequestMethod.POST,
                                                Environment.getExternalStorageDirectory().getPath(),
                                                 filePath, true, false);

        /**
         * 添加請求參數
         */
        if (map != null && !map.isEmpty()) {
            for (Map.Entry<String, String> entry : map.entrySet()) {
                if (entry.getKey() != null) {
                    downloadRequest.add(entry.getKey(), entry.getValue());
                }
            }
        }
        /**
         * 設置請求標識
         */
        downloadRequest.setCancelSign(what);
        /**
         * 下載
         */
        downloadQueue.add(what, downloadRequest, listener);

    }

使用方法

String downUrl ="http://192.168.1.100:8080//OkhttpAppLication/DownFile1";
        int downWhat = 96;
        String downFileName ="mewmuise.mp3";
        /**
         * 下載
         */
        NohttpUtils.getIntanse(getApplication()).asyncDownFileRequest(downUrl, downWhat, null, downFileName, new DownloadListener() {
            @Override
            public void onDownloadError(int what, Exception exception) {
                System.out.println("down error "+exception.getMessage());
            }

            @Override
            public void onStart(int what, boolean isResume, long rangeSize, Headers responseHeaders, long allCount) {

            }

            @Override
            public void onProgress(int what, int progress, long fileCount) {

            }

            @Override
            public void onFinish(int what, String filePath) {
                System.out.println("down finish  "+filePath);
            }

            @Override
            public void onCancel(int what) {

            }
        });


5.上傳表單數據以及文件

/**
     * 分塊級上傳文件 提交表單數據
     * @param url
     * @param what      網絡請求標識
     * @param forMap    網絡請求提交表單數據
     * @param fileMap   網絡請求提交上傳文件
     * @param listener  網絡請求標識
     */
    public void asyncLoadUpFile(String url, int what, Map<String, String> forMap,Map<String, String> fileMap, OnResponseListener<String> listener) {
        mRequestQueue.cancelBySign(what);
        Request<String> stringRequest = NoHttp.createStringRequest(url, RequestMethod.POST);
        /**
         * 添加上傳文件信息
         */
        if (fileMap != null && !fileMap.isEmpty()) {
            for (Map.Entry<String, String> entry : fileMap.entrySet()) {
                if (entry.getKey() != null) {
                    File file = new File(entry.getValue());
                    String fileName = file.getName();
                    stringRequest.addHeader("Content-Disposition", "form-data;name=\"" + fileName + "\";filename=\"" + fileName + "\"");
                    stringRequest.add(entry.getKey(), file);

                }
            }
        }
        /**
         * 添加請求參數
         */
        if (forMap != null && !forMap.isEmpty()) {
            for (Map.Entry<String, String> entry : forMap.entrySet()) {
                if (entry.getKey() != null) {
                    stringRequest.add(entry.getKey(), entry.getValue());
                }
            }
        }

        /**
         * 網絡取消標識
         */

        stringRequest.setCancelSign(what);
        /**
         * 發起請求
         */
        mRequestQueue.add(what,stringRequest,listener);

    }

使用方法

String loadUpUrl ="http://172.19.1.45:8080/OkhttpAppLication/LoadFileServlet";
        int what = 58;
        Map<String,String> map1 = new HashMap<>();
        map1.put("pucture1", "/storage/emulated/0/custom/2016/6/18//20160623135328.PNJE");
        /**
         * 上傳
         */
        NohttpUtils.getIntanse(getApplication()).asyncLoadUpFile(loadUpUrl, what, null,map1, new SimpleResponseListener<String>() {
            @Override
            public void onSucceed(int what, Response<String> response) {
                System.out.println("up succeed ");
                System.out.println("uploadFiele response is "+response.get());
            }

            @Override
            public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
                System.out.println("up faile ");
            }
        });

 

 

 

        當今世界是與時俱進的時代,早已不是百年前的那種十年礳一劍的時代,知識的更新的速度以超乎想象,咱們每個人沒有理由不去折騰生命

        更多文章 請查看 http://blog.csdn.net/zl18603543572

相關文章
相關標籤/搜索