OKhttpの簡単な使用
11289 ワード
簡単にokhttpを勉強する理由を説明します
GoogleはAndroid 6.0でHttpClientのApiを削除し、okhttp を採用した.
HTTPを効率的に使用することにより、アプリケーションの実行がより速く、より省トラフィックであるキャッシュデータに応答する重複ネットワーク要求を回避する.
シームレスにGZIPをサポートし、データ流量を削減する.
非常に簡単な使用、要求と応答のApiはスムーズな構築と不変性を持ち、同時に同期非同期呼び出しコールバック関数をサポートする.
ネットワークに問題が発生すると、一般的な接続の問題からにリカバリされます.
サーバが複数のIPアドレスを構成する場合、最初のIP接続が失敗すると、次のIP に接続しようとする.
以上はokhttp公式サイトですhttp://square.github.io/okhttp/ネット上のいくつかの理解を結びつけて整理したものや、間違っているところを見たら指摘してください.
次はokhttpの使い方を学びましょう
環境の設定
githubアドレス:https://github.com/square/okhttp
builde.gradleに追加
AndroidManifest.xmlに必要な権限を追加
きほんしよう
get非同期要求getリクエストで指定されたURLページリクエストを取得しますが、ここで注意したいのはAndroid 4.0以降は非プライマリスレッドで使用する必要があることです.
post非同期要求
同期要求
ファイルアップロードとマルチファイルアップロード
タイムアウトの設定は、このmOkHttpClientオブジェクトを使用する必要があります.
ファイルのダウンロードは実は簡単で、get同期や非同期要求を利用して
GoogleはAndroid 6.0でHttpClientのApiを削除し、okhttp を採用した.
HTTPを効率的に使用することにより、アプリケーションの実行がより速く、より省トラフィックであるキャッシュデータに応答する重複ネットワーク要求を回避する.
シームレスにGZIPをサポートし、データ流量を削減する.
非常に簡単な使用、要求と応答のApiはスムーズな構築と不変性を持ち、同時に同期非同期呼び出しコールバック関数をサポートする.
ネットワークに問題が発生すると、一般的な接続の問題からにリカバリされます.
サーバが複数のIPアドレスを構成する場合、最初のIP接続が失敗すると、次のIP に接続しようとする.
以上はokhttp公式サイトですhttp://square.github.io/okhttp/ネット上のいくつかの理解を結びつけて整理したものや、間違っているところを見たら指摘してください.
次はokhttpの使い方を学びましょう
環境の設定
githubアドレス:https://github.com/square/okhttp
builde.gradleに追加
compile 'com.squareup.okhttp3:okhttp:3.4.1'
AndroidManifest.xmlに必要な権限を追加
name="android.permission.INTERNET" />
きほんしよう
get非同期要求getリクエストで指定されたURLページリクエストを取得しますが、ここで注意したいのはAndroid 4.0以降は非プライマリスレッドで使用する必要があることです.
private OkHttpClient client = new OkHttpClient();
public static void get(){
// Request
Request request = new Request.Builder()
.url("http://www.jianshu.com/")
.get()
.build();
// ,
client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call,IOException e){
//
}
@Override
public void onResponse(Call call,Response response) throws IOException{
//
Log.e("okHttp","get="+response.body().string());
}
});
}
post非同期要求
private OkHttpClient client = new OkHttpClient();
public static void post(){
// Form , add
FormBody formBody = new FormBody.Builder()
.add("param","value")
.add("param","value")
.build();
// Request
Request request = new Request.Builder()
.url("http://www.jianshu.com/")
.post(formBody)
.build();
// ,
client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call,IOException e){
}
@Override
public void onResponse(Call call,Response response) throws IOException{
Log.e("okHttp","post="+response.body().string());
}
});
}
同期要求
client.newCall(request).enqueue(new Callback())
をclient.newCall(request).execute().body().string()
に変更すればよいファイルアップロードとマルチファイルアップロード
public static void upload(){
//
List<File> list = new ArrayList<>();
MultipartBody.Builder builder = new MultipartBody.Builder();
//
builder.setType(MultipartBody.FORM);
//
builder.addFormDataPart("param","value");
for (File file : list) {
//
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
builder.addFormDataPart("files", file.getName(), fileBody);
}
Request request = new Request.Builder()
.url("http://192.168.1.8/upload/UploadServlet")
.post(builder.build())
.build();
// ,
mOkHttpClient.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call,IOException e){
}
@Override
public void onResponse(Call call,Response response) throws IOException{
Log.e("okHttp","updLoad="+response.body().string());
}
});
}
タイムアウトの設定は、このmOkHttpClientオブジェクトを使用する必要があります.
public static void setTimeout(){
mOkHttpClient.newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)//10
.writeTimeout(10, TimeUnit.SECONDS)//10m
.readTimeout(10, TimeUnit.SECONDS)//10
.build();
}
ファイルのダウンロードは実は簡単で、get同期や非同期要求を利用して
client.newCall(request).execute().body().byteStream()
でInputStream入力ストリームを取得し、ファイルを書く操作でファイルのダウンロードを実現することができます.