Retrofit——01.はじめに
25331 ワード
RetrofitはRestful APIのHTTPネットワーク要求フレームワークのパッケージであり、ネットワーク要求の作業は本質的にOkHttpが完了し、Retrofitはネットワーク要求インタフェースのパッケージのみを担当する
注意:Restful API RESTful APIを移動してください.
手順の使用 Retrofitライブラリの依存を追加:
1つ目はRetrofit依存であり,後にgson変換が必要である.は、ネットワーク要求を記述するためのインタフェース を作成する.送信要求
注記ネットワーク要求方式タグ@FormUrlEncodedはform-encodedを送信するデータを表し、各キー値ペアは@Filedでキー名を注釈する必要があり、その後のオブジェクトは値を提供する必要がある. @Multipartはform-encodedを送信するデータ(ファイルアップロードされたシーンに適用)を表し、各キー値ペアは@Partでキー名を注釈する必要があり、その後のオブジェクトは値を提供する必要がある.
ネットワーク要求パラメータ@Header&@Headers追加リクエストヘッダ&追加不定のリクエストヘッダ @BodyはPost方式でカスタムデータ型をサーバに渡し、1つのMapをコミットすると@Fieldに相当するが、MapはFormBodyを通過する.Builderクラス処理はOkhttp形式に適合するフォームとなり、例えば: @Field&@FieldMap Postリクエスト送信時にリクエストを発行するフォームフィールドは、@FormUrlEncoded注記と合わせて を使用します.@Part&@PartMap Postリクエスト送信時にリクエストを提出するフォームフィールドは、@Fieldとの違い:機能は同じですが、携帯するパラメータタイプがより豊富で、データストリームも含まれているので、ファイルアップロードのあるシーンに適しています.@Multipart注記と合わせて を使用します.@Queryおよび@QueryMap@GETメソッドのクエリー・パラメータ(Query=Urlの'?'の後ろにあるkey-value)url=http://www.println.net/?cate=androidただし、Query=cate構成では、インタフェースメソッドにパラメータを1つ追加するだけでよい: @Path URLアドレスのデフォルト値 @Urlは、URL設定 のために要求されたURL変数を直接入力.
注意:Restful API RESTful APIを移動してください.
手順の使用
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
1つ目はRetrofit依存であり,後にgson変換が必要である.
public interface ApiInterface {
@FormUrlEncoded
@POST("/lookup/findDictVersion.wx")
Observable<ResultBean> getVersion(@Field("customerId") String customerId);
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://xxxx.aaaa.cn")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
ApiInterface apiInterface = retrofit.create(ApiInterface.class);
apiInterface.getVersion("")
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<ResultBean>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("log","onSubscribe");
}
@Override
public void onNext(ResultBean value) {
Log.e("log",value.data.downUrl);
}
@Override
public void onError(Throwable e) {
Log.e("log","onError");
}
@Override
public void onComplete() {
Log.e("log","onComplete");
}
});
注記ネットワーク要求方式タグ
public interface GetRequest_Interface {
/**
* (Content-Type:application/x-www-form-urlencoded)
* Field("username")
String name
name username
*/
@POST("/form")
@FormUrlEncoded
Call<ResponseBody> testFormUrlEncoded1(@Field("username") String name, @Field("age") int age);
/**
* {@link Part} ,{@link RequestBody}、{@link okhttp3.MultipartBody.Part} 、
* {@link okhttp3.MultipartBody.Part} , ({@link okhttp3.MultipartBody.Part} ),
*/
@POST("/form")
@Multipart
Call<ResponseBody> testFileUpload1(@Part("name") RequestBody name, @Part("age") RequestBody age, @Part MultipartBody.Part file);
}
ネットワーク要求パラメータ
// @Header
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
// @Headers
@Headers("Authorization: authorization")
@GET("user")
Call<User> getUser()
// 。
//
// 1. :@Header ,@Headers
// 2. :@Header ;@Headers
FormBody.Builder builder = new FormBody.Builder();
builder.add("key","value");
public interface GetRequest_Interface {
/**
* (Content-Type:application/x-www-form-urlencoded)
* Field("username")
String name
name username
*/
@POST("/form")
@FormUrlEncoded
Call<ResponseBody> testFormUrlEncoded1(@Field("username") String name, @Field("age") int age);
/**
* Map key
*/
@POST("/form")
@FormUrlEncoded
Call<ResponseBody> testFormUrlEncoded2(@FieldMap Map<String, Object> map);
}
public interface GetRequest_Interface {
/**
* {@link Part} ,{@link RequestBody}、{@link okhttp3.MultipartBody.Part} 、
* {@link okhttp3.MultipartBody.Part} , ({@link okhttp3.MultipartBody.Part} ),
*/
@POST("/form")
@Multipart
Call<ResponseBody> testFileUpload1(@Part("name") RequestBody name, @Part("age") RequestBody age, @Part MultipartBody.Part file);
/**
* PartMap Map , {@link RequestBody } ,
* , {@link retrofit2.Converter} , {@link com.google.gson.Gson} {@link retrofit2.converter.gson.GsonRequestBodyConverter}
* {@link MultipartBody.Part} , @Part MultipartBody.Part
*/
@POST("/form")
@Multipart
Call<ResponseBody> testFileUpload2(@PartMap Map<String, RequestBody> args, @Part MultipartBody.Part file);
@POST("/form")
@Multipart
Call<ResponseBody> testFileUpload3(@PartMap Map<String, RequestBody> args);
}
@GET("/")
Call<String> cate(@Query("cate") String cate);
public interface GetRequest_Interface {
@GET("users/{user}/repos")
Call<ResponseBody> getBlog(@Path("user") String user );
// API :https://api.github.com/users/{user}/repos
// , {user} user( @Path )
}
public interface GetRequest_Interface {
@GET
Call<ResponseBody> testUrlAndQuery(@Url String url, @Query("showAll") boolean showAll);
// URL ,@GET URL
// GET、POST...HTTP Url , {@link Url}
}