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

資訊專欄INFORMATION COLUMN

okhttp傳遞數組參數

awokezhou / 1594人閱讀

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

采用okhttp+rxjava+retrofit向后臺傳遞字符串數組參數,格式如下

{
    "list": ["xxx","yyy"]//value是個字符串數組
}

最初定義了一個

List list = new ArrayList<>();

然后轉成字符串

   String str =  list.toString();

但是這樣得到的結果是

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

比較以上兩種格式,發現格式不對.傳給后臺時,總是報參數錯誤的異常.

解決辦法:定義一個對象繼承自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,輸入請求參數,選擇Body,選擇raw,選擇JSON(application/json)

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

關鍵的代碼:

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

create方法的第二個參數就是我們的對象DefaultRequestBody轉換后的json字符串.

//Gson轉換自動處理了字符串數組,不會出現上面那種value格式錯誤
String json = new org.google.Gson().toJson(new DefaultRequestBody());

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

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

解決了傳遞字符串數組的問題

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68988.html

相關文章

  • 2019最新Android面試題

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

    plus2047 評論0 收藏0

發表評論

0條評論

awokezhou

|高級講師

TA的文章

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