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