okhttp3 json格式數(shù)據(jù)網(wǎng)絡請求怔软、https認證及圖片提交請求

在項目開發(fā)中,都會涉及到網(wǎng)絡的請求括改,okhttp的話是谷歌官方推薦的一個網(wǎng)絡請求框架嘱能,支持異步GET請求、異步POST請求焰檩、異步上傳文件、異步下載文件等多種操作析苫, 這里主要說的是okhttp json格式請求數(shù)據(jù)情況下的異步POST請求衩侥、okhttp的https認證以及圖片上傳。

引入依賴庫:

compile files('libs/okhttp-3.7.0.jar')
compile files('libs/okio-1.9.0.jar')

添加網(wǎng)絡權限:

<uses-permission android:name="android.permission.INTERNET"/>

okhttp的https認證:
下面寫的https認證采用的是單項認證跪但,不是雙向認證峦萎;

/**
  * 以下為https的認證,這里采用的是https的單項認證 okhttp不驗證直接通過通過所有的https連接
  *
  * @author miao
 */
private static class TrustAllCerts implements X509TrustManager {
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    
    }

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

    @Override
    public X509Certificate[] getAcceptedIssuers() 
        return new X509Certificate[0];
    }
}
@SuppressWarnings("unused")
private static class TrustAllHostnameVerifier implements HostnameVerifier {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
}
private static SSLSocketFactory createSSLSocketFactory() {
    SSLSocketFactory ssfFactory = null;

    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());

        ssfFactory = sc.getSocketFactory();
        } catch (Exception e) {
        
        }

    return ssfFactory;
}

上面這些就是https的單項認證被环,在調用okhttp請求網(wǎng)絡的時候進行設置認證就可以了筛欢;

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
/**
  * 請求網(wǎng)絡  https認證
  * @param context  上下文
  * @param jsonData  json字符串數(shù)據(jù)
  * @param doRequestUrl  請求鏈接
  */
public static void requestTask(Context context,String jsonData,String doRequestUrl){
    if(context==null){
        return;
    }
    OkHttpClient client = new OkHttpClient.Builder().sslSocketFactory(createSSLSocketFactory()).hostnameVerifier(new TrustAllHostnameVerifier())// https認證
        .connectTimeout(30000, TimeUnit.MILLISECONDS).readTimeout(35000, TimeUnit.MILLISECONDS)// 設置連接時間和讀取時間
        .build();// 設置緩存

    RequestBody body = RequestBody.create(JSON, jsonData);
    Request request = new Request.Builder().url(doRequestUrl).post(body).build();

    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            //失敗回調 回調是在子線程中版姑,可使用Handler迟郎、post、activity.runOnUiThread()等方式在主線程中更新ui
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            //成功回調  可使用Handler炒嘲、post匈庭、activity.runOnUiThread()等方式在主線程中更新ui
            //獲取返回byte數(shù)組
            byte[] bytes1 = response.body().bytes();
            String resultData = new String(bytes1);
        }
    });
}

上面的所謂的json格式的請求數(shù)據(jù)就是類似于下面的數(shù)據(jù)格式:

{"data":{"address":"廣州","id":1,"name":"xiaoluo"}}

okhttp圖片提交請求:

private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
/**
  * okhttp提交圖片請求
  * @param mContext  上下文
  * @param imageUrl  圖片本地地址
  * @param requestUrl  請求鏈接
  */
public static void doPicTaskInfo(Context mContext, String imageUrl,String requestUrl){
    if(mContext==null){
        return;
    }
    //設置連接阱持,讀寫時間
    OkHttpClient client = new OkHttpClient.Builder().connectTimeout(25000, TimeUnit.MILLISECONDS).writeTimeout(30000, TimeUnit.MILLISECONDS)
        .readTimeout(30000, TimeUnit.MILLISECONDS).build();

    final File f = new File(imageUrl);
    MultipartBody.Builder mbody = new MultipartBody.Builder().setType(MultipartBody.FORM);
    if (f != null) {
        mbody.addFormDataPart("image", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f));
    }
    MultipartBody requestBody = mbody.build();
    //構建請求
    Request request = new Request.Builder()
        .url(requestUrl)//地址
        .post(requestBody)//添加請求體
        .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            //失敗回調 回調是在子線程中,可使用Handler蒜绽、post桶现、activity.runOnUiThread()等方式在主線程中更新ui
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            //成功回調  可使用Handler、post相赁、activity.runOnUiThread()等方式在主線程中更新ui
            //請求成功
            byte[] bytes = response.body().bytes();
            String result = new String(bytes);

        }
    });
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末钮科,一起剝皮案震驚了整個濱河市婆赠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛆挫,老刑警劉巖妙黍,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件废境,死亡現(xiàn)場離奇詭異筒繁,居然都是意外死亡,警方通過查閱死者的電腦和手機驮宴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門堵泽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恢总,“玉大人,你說我怎么就攤上這事片仿。” “怎么了厢岂?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長塔粒。 經(jīng)常有香客問我,道長船老,這世上最難降的妖魔是什么扬虚? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任辜昵,我火速辦了婚禮,結果婚禮上堪置,老公的妹妹穿的比我還像新娘。我一直安慰自己岭洲,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著替蔬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驻粟。 梳的紋絲不亂的頭發(fā)上凶异,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天剩彬,我揣著相機與錄音,去河邊找鬼沃饶。 笑死,一個胖子當著我的面吹牛绍坝,可吹牛的內容都是我干的。 我是一名探鬼主播椎咧,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼勤讽,長吁一口氣:“原來是場噩夢啊……” “哼拗踢!你這毒婦竟也來了?” 一聲冷哼從身側響起诸狭,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤驯遇,失蹤者是張志新(化名)和其女友劉穎叉庐,沒想到半個月后会喝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡枉阵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年岭妖,在試婚紗的時候發(fā)現(xiàn)自己被綠了反璃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片假夺。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖已卷,靈堂內的尸體忽然破棺而出梧田,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布裁眯,位于F島的核電站鹉梨,受9級特大地震影響,放射性物質發(fā)生泄漏穿稳。R本人自食惡果不足惜存皂,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逢艘。 院中可真熱鬧旦袋,春花似錦、人聲如沸它改。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽央拖。三九已至祭阀,卻和暖如春柬讨,著一層夾襖步出監(jiān)牢的瞬間踩官,已是汗流浹背蔗牡。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留黔攒,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像商虐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子劫哼,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理豪嚎,服務發(fā)現(xiàn),斷路器糯耍,智...
    卡卡羅2017閱讀 134,707評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,304評論 25 707
  • 很多感覺和感性都是轉瞬即逝的東西舵鳞。 路途中看見的人抛虏、初次相遇或重逢迂猴,亦是轉瞬即逝沸毁。但是他們都是你的渡人息尺。 就像口腔...
    燈下橙子閱讀 544評論 2 0
  • 父親屬羊凛虽,67年出生凯旋;我也屬羊至非,91出生荒椭。父親比我整整大了“兩只”羊,從記事起身害,他就不茍言笑侍瑟;雖然對我疼愛有加丢习,也...
    小螞蟻小螞蟻閱讀 625評論 0 3
  • 每當學員在學車出錯的時候鲤屡,教練總是大聲的說學員酒来,其實教練不是罵你辽社,只是為了引起你對開車的重視滴铅。這樣做汉匙,是為了讓你能...
    c13c9f0152b8閱讀 743評論 0 0