国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

okhttp傳遞數(shù)組參數(shù)

awokezhou / 1607人閱讀

摘要:采用向后臺傳遞字符串?dāng)?shù)組參數(shù)格式如下是個字符串?dāng)?shù)組最初定義了一個然后轉(zhuǎn)成字符串但是這樣得到的結(jié)果是變成了字符串比較以上兩種格式發(fā)現(xiàn)格式不對傳給后臺時總是報參數(shù)錯誤的異常解決辦法定義一個對象繼承自通過定義請求接口打開輸入輸入請求參數(shù)選擇選擇

采用okhttp+rxjava+retrofit向后臺傳遞字符串?dāng)?shù)組參數(shù),格式如下

{
    "list": ["xxx","yyy"]//value是個字符串?dāng)?shù)組
}

最初定義了一個

List list = new ArrayList<>();

然后轉(zhuǎn)成字符串

   String str =  list.toString();

但是這樣得到的結(jié)果是

{
    "list": "["xxx","yyy"]"http://value變成了字符串
}

比較以上兩種格式,發(fā)現(xiàn)格式不對.傳給后臺時,總是報參數(shù)錯誤的異常.

解決辦法:定義一個對象繼承自okhttp3.RequestBody

public class DefaultRequestBody extends okhttp3.RequestBody{
    public List list;
    @Nullable
    @Override
    public MediaType contentType() {
        return MediaType.parse("application/json; charset=utf-8");
    }

    @Override
    public void writeTo(BufferedSink sink) throws IOException {

    }
}

通過Retrofit定義請求接口API

@FormUrlEncoded
@POST("url")
Observable request(@body DefaultRequestBody body);

打開PostMan,輸入url,輸入請求參數(shù),選擇Body,選擇raw,選擇JSON(application/json)

輸入json格式的參數(shù),點擊右側(cè)的[code]查看,選擇[java ok http],如圖

關(guān)鍵的代碼:

    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody
    .create(mediaType, "{"list":    ["xxx","yyy"]}");
    

create方法的第二個參數(shù)就是我們的對象DefaultRequestBody轉(zhuǎn)換后的json字符串.

//Gson轉(zhuǎn)換自動處理了字符串?dāng)?shù)組,不會出現(xiàn)上面那種value格式錯誤
String json = new org.google.Gson().toJson(new DefaultRequestBody());

上面定義的接口request API中傳入的是對象DefaultRequestBody,我們在okHttp的攔截器里做轉(zhuǎn)換

    public class DefaultIntercept extends okhttp3.Intercept{
         @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            RequestBody requestBody = request.body();
            if(requestBody instanceof DefaultRequestBody){
                DefaultRequestBody defaultBody = (DefaultRequestBody)requestBody;
                String json = new Gson().toJson(defaultBody);
                MediaType mediaType = MediaType.parse("application/json");
                //生成RequestBody
                RequestBody body = RequestBody.create(mediaType,json);
                //傳遞body,重新生成request請求
                request = request.newBuilder().post(body).build();
            }
            return chain.proceed(request);
        } 
    }

解決了傳遞字符串?dāng)?shù)組的問題

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68988.html

相關(guān)文章

  • 2019最新Android面試題

    摘要:若攔截事件返回為,表示攔截,事件不會向下層的或者傳遞,表示不攔截,繼續(xù)分發(fā)事件。五注冊反注冊未成對使用引起的內(nèi)存泄漏。七集合對象沒有及時清理引起的內(nèi)存泄漏。 原文鏈接:https://blog.csdn.net/wen_hah... 版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接! 前言 金三銀四到來了,找工作的好時候到了,小伙伴們是不是都在忙著找工作呢,小弟前一陣也是忙著在找工作,...

    plus2047 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<