Android okhttp使用
概要
OKHttpはandroidでネットワークを要求するためによく使われるネットワーク要求フレームワークです.
OKHttpを除いて、Androidの主流のネットリクエストフレームワークは以下の通りです. Android-Async-Http Volley OkHttp Retrofit
依存ライブラリのインポート
在build.gradleは次の依存性を追加します.
ネットワーク権限の追加
getリクエスト
Postリクエスト
OkHttpではPostメソッドでキー値対データをサーバに転送しFormBodyを使用する.Builderは要求されたパラメータキー値を作成し、RequestBodyオブジェクトを構築します.
key-value:キー値対Stringのコミット:文字列タイプForm:フォームデータStream:ストリームタイプFile:ファイルタイプ
postフォームリクエスト
postアップロードファイル
参考博文
https://www.jianshu.com/p/bb57bc65e4ce
https://www.jianshu.com/p/b1cf0b574e74
OKHttpはandroidでネットワークを要求するためによく使われるネットワーク要求フレームワークです.
OKHttpを除いて、Androidの主流のネットリクエストフレームワークは以下の通りです.
依存ライブラリのインポート
在build.gradleは次の依存性を追加します.
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
ネットワーク権限の追加
getリクエスト
/**
* Get
*
* @param url url
* @return
*/
public String syncGet(String url) {
String result = "";
//1. OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.get()
.build();
final Call call = okHttpClient.newCall(request);
//4. ,
new Thread(new Runnable() {
@Override
public void run() {
try {
// , Response, IO
Response response = call.execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
return result;
}
/**
* Get
*
* @param url url
* @return
*/
public void nonSyncGet(String url, Callback responseCallback) {
String result = null;
//1. OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
//2. Request
Request request = new Request.Builder()
.url(url)
.get()
.build();
Call call =okHttpClient.newCall(request);
call.enqueue(responseCallback);
}
Postリクエスト
OkHttpではPostメソッドでキー値対データをサーバに転送しFormBodyを使用する.Builderは要求されたパラメータキー値を作成し、RequestBodyオブジェクトを構築します.
key-value:キー値対Stringのコミット:文字列タイプForm:フォームデータStream:ストリームタイプFile:ファイルタイプ
/**
* Post
*
* @param url url
* @return
*/
public String syncPost(String url) {
String result = null;
//1. OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
FormBody.Builder mBuild = new FormBody.Builder();
mBuild.add("name", "tony")
.add("age", "21");
RequestBody requestBody= mBuild.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
result = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* Post
*
* @param url url
* @return
*/
public void nonSyncPost(String url, Callback responseCallback) {
//1. OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
FormBody.Builder mBuild = new FormBody.Builder();
mBuild.add("name", "tony")
.add("age", "21");
RequestBody requestBody= mBuild.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
try {
okHttpClient.newCall(request).enqueue(responseCallback);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Post json
*
* @param url url
* @return
*/
public String postJson(String url, Callback responseCallback) {
String result = null;
String jsonStr = "json";
//1. OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType, jsonStr);
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
result = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* Post String
*
* @param url url
* @return
*/
public String postString(String url, Callback responseCallback) {
String result = null;
//1. OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain;charset=utf-8"),
"{username:tony;password:123456}");
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
result = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
postフォームリクエスト
/**
* Post
*
* @param url url
* @return
*/
public String postForm(String url, Callback responseCallback) {
String result = null;
//1. OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
MultipartBody.Builder mBuild = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("username", "tony")
.addFormDataPart("password", "123456");
RequestBody requestBody= mBuild.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
result = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
postアップロードファイル
public void uploadFile(String url) {
ArrayList filelist = getFileList();
//1. OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
MultipartBody.Builder multipartBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
for (int i = 0; i < filelist.size(); i++) {
String path = filelist.get(i);
File file = new File(path);
String fileMimeType = getMimeType(file);
// ,
MediaType mediaType = MediaType.parse(fileMimeType);
RequestBody fileBody = RequestBody.create(mediaType, file);
multipartBody.addFormDataPart("file" + i, file.getName(), fileBody);
}
RequestBody requestBody = multipartBody.build();
Request requestPostFile = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(requestPostFile).execute();
if (response.isSuccessful()) {
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
参考博文
https://www.jianshu.com/p/bb57bc65e4ce
https://www.jianshu.com/p/b1cf0b574e74