Android OkHttpの使い方
5572 ワード
前言
GoogleはAndroid 6.0バージョンでHttpClient関連APIを削除したため、ネットアクセスではOKHttpも流行しており、最近暇なうちに各道大神のOKHttpに関する記事を参考に、その使用心得をまとめてみましょう.
OKHttp依存パッケージリンク(https://search.maven.org/remote_content?g=com.squareup.okhttp&a=okhttp&v=LATEST)をクリックしてダウンロード
OkHttp内部依存パッケージokioリンク(https://search.maven.org/remote_content?g=com.squareup.okio&a=okio&v=LATEST)をクリックしてダウンロード
以上、getリクエストを送信する手順を示します.
1.パラメータが少なくともurlであるRequestオブジェクトを作成してもよいし、Requestを通過してもよい.Builderはheader、mehodなど、より多くのパラメータを設定します.
2.requestのオブジェクトを構築してCallオブジェクトを得ることは、リクエストがタスクにカプセル化され、execute()やcancel()などの方法を持つことである.
3.最後に要求を非同期で実行するのでcallを呼び出す.Enqueueは、callをスケジューリングキューに追加し、タスクの実行が完了するのを待ってCallBackで結果を得ることができます.
に注意
1.onResponseコールバックのパラメータはresponseであり、一般的には、例えば、
GoogleはAndroid 6.0バージョンでHttpClient関連APIを削除したため、ネットアクセスではOKHttpも流行しており、最近暇なうちに各道大神のOKHttpに関する記事を参考に、その使用心得をまとめてみましょう.
OKHttp依存パッケージリンク(https://search.maven.org/remote_content?g=com.squareup.okhttp&a=okhttp&v=LATEST)をクリックしてダウンロード
OkHttp内部依存パッケージokioリンク(https://search.maven.org/remote_content?g=com.squareup.okio&a=okio&v=LATEST)をクリックしてダウンロード
、Http Get
public void httpGet() {
// okHttpClient
OkHttpClient mOkHttpClient = new OkHttpClient();
// Request
final Request request = new Request.Builder()
.url("http://blog.csdn.net/android_mnbvcxz")
.get()
.build();
// new call
Call call = mOkHttpClient.newCall(request);
//
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(final Response response) throws IOException {
// String htmlStr = response.body().string();
}
});
}
以上、getリクエストを送信する手順を示します.
1.パラメータが少なくともurlであるRequestオブジェクトを作成してもよいし、Requestを通過してもよい.Builderはheader、mehodなど、より多くのパラメータを設定します.
2.requestのオブジェクトを構築してCallオブジェクトを得ることは、リクエストがタスクにカプセル化され、execute()やcancel()などの方法を持つことである.
3.最後に要求を非同期で実行するのでcallを呼び出す.Enqueueは、callをスケジューリングキューに追加し、タスクの実行が完了するのを待ってCallBackで結果を得ることができます.
に注意
1.onResponseコールバックのパラメータはresponseであり、一般的には、例えば、
response.body().string()
で取得できる戻り文字列を取得したい.返されるバイナリバイト配列を取得する場合、response.body().bytes()
が呼び出される.戻るinputStreamを取得したい場合は、response.body().byteStream();
を呼び出します.2. , , Call execute()
メソッドでは、call.execute()
を び すこともできます.Response
を すこともできます.
、Http Post
//post
public void httpPost() {
// okHttpClient
OkHttpClient mOkHttpClient = new OkHttpClient();
FormEncodingBuilder builder = new FormEncodingBuilder();
// RequestBody
RequestBody requestBody = builder
.add("username", " ")
.add("password", " ")
.build();
// Request
Request request = new Request.Builder()
.url("http://blog.csdn.net/android_mnbvcxz")
.post(requestBody)
.build();
//
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(final Response response) throws IOException {
// String htmlStr = response.body().string();
}
});
}
//post
public void httpPostString() {
// okHttpClient
OkHttpClient mOkHttpClient = new OkHttpClient();
// RequestBody
RequestBody requestBody = RequestBody
.create(MediaType.parse("text/plain;chaset=utf-8"),"'username':' ','passwored':' '");
// Request
Request request = new Request.Builder()
.url("http://blog.csdn.net/android_mnbvcxz")
.post(requestBody)
.build();
//
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(final Response response) throws IOException {
// String htmlStr = response.body().string();
}
});
}
//post File
public void httpPostFile() {
//1、 okHttpClient
OkHttpClient mOkHttpClient = new OkHttpClient();
//2、 RequestBody
File file = new File(Environment.getExternalStorageDirectory(),"banner.jpg");
if (!file.exists()) {
Log.e("error_tag", file.getAbsolutePath() + "not exist!");
return;
}
//mime type
RequestBody fileBody=RequestBody.create(MediaType.parse("application/octet-stream"), file);
//3、 Request
Request request = new Request.Builder()
.url("http://blog.csdn.net/android_mnbvcxz").post(fileBody)
.build();
//4、
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(final Response response) throws IOException {
// String htmlStr = response.body().string();
}
});
}
ここでpostリクエストはパラメータを しているが,Requestの の いにすぎない.
1.httpPost()メソッドでは、パラメータは に まれる.FormEncodingBuilderを じて のStringキーの ペアを し、RequestBodyを し、Requestの を します.
2.httpPostString()のメソッドではパラメータは であるため、FormEncodingBuilderというコンストラクタモードは であり、Requestbodyの メソッドcreateを するだけでよい.
3.httpPostFile()メソッドではファイルを1つだけコミットするので、httpPostString()と にRequestbodyを した メソッドcreateを します
に
Requestbodyの メソッドcreateを する の、ファイルタイプのMediaTypeが な は、この を してください.http://blog.csdn.net/android_mnbvcxz/article/details/65441571クリックしてリンクを く