android網(wǎng)絡(luò)請(qǐng)求那點(diǎn)事

1 添加okhttp3依賴

在build.gradle中添加

compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okio:okio:1.9.0'

2 請(qǐng)求代碼

具體請(qǐng)求步驟見代碼中的注釋

a 普通請(qǐng)求

// 創(chuàng)建請(qǐng)求客戶端對(duì)象
OkHttpClient okHttpClient = new OkHttpClient();
// 創(chuàng)建表單
RequestBody formBody = new FormBody.Builder()
            .add("id", id)
            .add("type", type)
            .build();
// 創(chuàng)建請(qǐng)求對(duì)象
final Request request = new Request.Builder()
            .url(url)
            .post(formBody) // Get請(qǐng)求的話就不需要這一行了
            .build();
// 建立請(qǐng)求
Call call = okHttpClient.newCall(request);
// 接受響應(yīng)
call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
                Log.e(TAG, "IOException: " + e);
        }
        @Override
        public void onResponse(Call call, Response response) throws IOException {
              // 使用Gson解析返回的數(shù)據(jù)
              Gson gson = new Gson();
              try {
                    String test = response.body().string();
                    Log.d(TAG, "json string: " + test);
                    Message message = gson.fromJson(test, Result.class);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                }
            }
});

b 通過OkHttpClient.Builder自定義client

如果我們想做一些事情,比如繞過SSL證書檢測(cè)(參見我的另一篇博文) 妇拯,就需要我們對(duì)OkHttpClient做一些設(shè)置赃承,直接看代碼:

OkHttpClient okHttpClient = getUnsafeOkHttpClient().retryOnConnectionFailure(true).build();

上面我們通過調(diào)用一個(gè)方法返回的Builder創(chuàng)建OkHttpClient對(duì)象,方法如下:

public static OkHttpClient.Builder getUnsafeOkHttpClient() {
        try {
            // Create a trust manager that does not validate certificate chains
            final TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                        }

                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                        }

                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return new java.security.cert.X509Certificate[]{};
                        }
                    }
            };

            // Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            // Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.sslSocketFactory(sslSocketFactory);
            builder.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });

            return builder;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

可以看到可以在創(chuàng)建builder的過程中去做很多事情价脾。

3 使用Gson解析Json數(shù)據(jù)

1) 添加項(xiàng)目依賴:

compile 'com.google.code.gson:gson:2.8.0'

2) 創(chuàng)建解析對(duì)象類:

根據(jù)返回?cái)?shù)據(jù)的鍵值對(duì)創(chuàng)建類成員變量悔雹,注意類型补疑。
比如返回

{
    "code": 123,
    "data": {
        "weather": "sunny",
        "temperature": 28,
    }
}

那就需要建兩個(gè)類分別解析上面的兩個(gè)對(duì)象,如:

public class Result {

    public int code;
    public Data data;

    public Message() {
    }
public class Data{
    public String weather;
    public int temperature;
}

3) Gson解析

String test = response.body().string();
Result result = gson.fromJson(test, Result.class);

注意response.body()只可取一次碳褒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末折砸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沙峻,更是在濱河造成了極大的恐慌睦授,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摔寨,死亡現(xiàn)場(chǎng)離奇詭異去枷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門删顶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竖螃,“玉大人,你說我怎么就攤上這事逗余√嘏兀” “怎么了腌逢?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵更舞,是天一觀的道長欲诺。 經(jīng)常有香客問我捆交,道長,這世上最難降的妖魔是什么唱蒸? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任豪筝,我火速辦了婚禮愚墓,結(jié)果婚禮上输虱,老公的妹妹穿的比我還像新娘些楣。我一直安慰自己脂凶,他們只是感情好宪睹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚕钦,像睡著了一般亭病。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘶居,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天罪帖,我揣著相機(jī)與錄音,去河邊找鬼邮屁。 笑死整袁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的佑吝。 我是一名探鬼主播坐昙,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼芋忿!你這毒婦竟也來了炸客?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤戈钢,失蹤者是張志新(化名)和其女友劉穎痹仙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殉了,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡开仰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抖所。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梨州,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出田轧,到底是詐尸還是另有隱情暴匠,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布傻粘,位于F島的核電站每窖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弦悉。R本人自食惡果不足惜窒典,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稽莉。 院中可真熱鬧瀑志,春花似錦、人聲如沸污秆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽良拼。三九已至战得,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間庸推,已是汗流浹背常侦。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贬媒,地道東北人聋亡。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像际乘,于是被迫代替她去往敵國和親坡倔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蚓庭,服務(wù)發(fā)現(xiàn)致讥,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 參考Android網(wǎng)絡(luò)請(qǐng)求心路歷程Android Http接地氣網(wǎng)絡(luò)請(qǐng)求(HttpURLConnection) 一...
    合肥黑閱讀 21,276評(píng)論 7 63
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,138評(píng)論 25 707
  • 參考資源 官網(wǎng) 國內(nèi)博客 GitHub官網(wǎng) 鑒于一些關(guān)于OKHttp3源碼的解析文檔過于碎片化器赞,本文系統(tǒng)的垢袱,由淺入...
    風(fēng)骨依存閱讀 12,506評(píng)論 11 82
  • 早晨糾結(jié)了半天,不知道本周閱讀什么書港柜,《思考请契,快與慢》這本書是6月8日買的咳榜,曾讀到一小半就放棄了,究其原因還是看起...
    田心遠(yuǎn)閱讀 136評(píng)論 0 0