OkHttp的使用分析,okhttp的多種getpost方式

Okhttp的使用其實相對比較簡單,它的使用方法整理以下只有4步:

1,創建client對象,

2,創建請求對象

3,獲取call對象

4,回調數據

當然,根據不同的需求會增加不同的步驟,但是離不開着基本的四部,不廢話,直接上代碼:


本文通過四個例子描述了四張常用的get,post請求方式:



直接上乾貨,註釋相信已經非常的詳細了:

 //普通的get請求,得到網址直接獲取數據,相對簡單
    private void nomalOkHttpGet() {
        //創建client對象
        OkHttpClient okHttpClient = new OkHttpClient();
        //創建請求對象
        Request request = new Request.Builder().url("此處填寫url").build();
        //通過上邊的requsrt作爲參數得到call,對象,接下來就是通過回調進行數據獲取
        Call call = okHttpClient.newCall(request);
        //通過異步的方式
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
//得到的數據在respnse中存儲,有以下幾種返回方式,需呀哪一張就可以使用哪一種,還有更多,這裏只是例舉
                //返回字節數組
                byte[] bytes = response.body().bytes();
                //返回字節流
                InputStream inputStream = response.body().byteStream();
                //返回字符流
                Reader reader = response.body().charStream();
                //返回內容長度
                long l = response.body().contentLength();
                //返回內容類型
                MediaType mediaType = response.body().contentType();
                //返回字符串
                String string = response.body().string();


            }
        });


        try {
//            同步的方法,選擇其中一個即可,如果是同步,需要創建子線程進行此操作
            call.execute();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //含有請求頭的get請求,需要增加異步添加請球頭的操作
    private void haveHeaderOktHttpGet() {
        OkHttpClient okHttpClient = new OkHttpClient();
//        創建請求,添加請求頭,url可以攜帶參數,當然也可不攜帶,這裏只是重點說帶有請求頭的請求
        Request request = new Request.Builder().addHeader("name", "values").url("網址可以攜帶參數").build();
//        得到call對象
        Call call = okHttpClient.newCall(request);
        //回調數據
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });

    }

    //帶有文件和參數混合的post請求,
    private void fileAndParamOkhttppost() {
        OkHttpClient okHttpClient = new OkHttpClient();
        //創建帶有文件的文件體,tempFile爲你要提交的文件
        RequestBody fileBody = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), tempFile);
        //創建請求體,設置請求體類型是混合類型的,然後將文件和參數等回合數據加入,
        RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("參數名", "參數").addFormDataPart("參數名", "參數").addFormDataPart("參數類型", "文件類型", fileBody).build();
        //創建請求對象,發起請求,
        Request request = new Request.Builder().url("url").post(requestBody).addHeader("請求頭名", "請求頭參數").build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });


    }
//一個普通的post請求,攜帶表單上傳
    private void narmalOkHttpPost() {
        OkHttpClient okHttpClient = new OkHttpClient();
        //創建帶有參數的請求體對象
        RequestBody requestBody = new FormBody.Builder().add("參數名", "參數").add("參數名", "參數").build();
        //將請求體放入到請求中,後邊的同前邊一樣過程一致
        Request request = new Request.Builder().url("url").post(requestBody).addHeader("請求頭名", "請求頭參數").build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章