Gson解析を使ってRetrofitを返します.
RetrofitとRxJavaシリーズのブログ:Retrofitを使ってファイルをアップロードし、Gson解析Retrofitを使って結果RetrofitとRxJavaを結合して、RetrofitとRxJavaを使ってポーリングを行います.
Retrofitはデフォルトで返した結果は
依存を追加
build.gradleに依存を入れて、この時Retrofitの依存を必要とするだけではなくて、gsonとconverter-gsonの2つの依存に参加しなければならなくて、ここのconverter-gsonは私達の必要とするgsonの分析倉庫です.
gsonをよく知っている子供用の靴は知っています.gsonはクラスを定義する必要があります.このクラスの中のフィールドはjson文字列の中のキーに対応しています.私たちは実際の状況によってこのクラスを定義します.例えば、ここでは3つのフィールドを受け入れる必要があります.それぞれ
コードアドレス
https://github.com/flyingzhao/RxJavaPolling/blob/master/app/src/main/java/com/optimais/pollingtest/UpLoadImage.java
Retrofitはデフォルトで返した結果は
ResponseBody
タイプであるため、実際にはしばしばJson形式の文字列を返しています.この場合は戻り結果を解析する必要があります.Retrofitはまた柔軟なjson解析方式を提供した.Converter
の存在のおかげで、Retrofitは、入力タイプと復帰タイプの両方で非常に柔軟に表現され、ResponseBodyConverter
を修正すれば、戻りデータのタイプが自由に変更され、適切な解析方法が使用される.gson解析文字列を使うとどうなりますか?自分で書くのはもちろんいいですが、Retrofitはもっと便利な実現を提供しています.私たちはconverter-gson
のこのライブラリを使うだけでいいです.依存を追加
build.gradleに依存を入れて、この時Retrofitの依存を必要とするだけではなくて、gsonとconverter-gsonの2つの依存に参加しなければならなくて、ここのconverter-gsonは私達の必要とするgsonの分析倉庫です.
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.google.code.gson:gson:2.7'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
gsonクラスを定義gsonをよく知っている子供用の靴は知っています.gsonはクラスを定義する必要があります.このクラスの中のフィールドはjson文字列の中のキーに対応しています.私たちは実際の状況によってこのクラスを定義します.例えば、ここでは3つのフィールドを受け入れる必要があります.それぞれ
message
、flag
、addDate
です.public class UploadJsonResult {
String message;
String flag;
String addDate;
public String getFlag() {
return flag;
}
public String getMessage() {
return message;
}
public String getAddDate() {
return addDate;
}
}
converter-gsonを追加します.ResponseBody
で返されたjson文字列を解析するためには、まず要求インターフェースの戻り値タイプを修正し、共通のResponseBody
をここのjsonクラスUploadJsonResult
に変更する必要がある.public interface RetrofitImageUploadService {
@Multipart
@POST("EntranceGuardes/app/appOpen_pushdDataToApp.action")
Call upload(@Part("userId") RequestBody description,
@Part MultipartBody.Part file);
}
次に、Retrofit
オブジェクトを作成する際にaddConverterFactory(GsonConverterFactory.create())
を追加すればよく、これによりデフォルトのResponseBody
タイプの戻り値をgsonを用いて解析することができ、最終的に得られた応答結果はUploadJsonResult
タイプのオブジェクトである.Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://172.18.81.155:8080/")
.addConverterFactory(GsonConverterFactory.create())
.build();
上記の操作を経て、サーバから戻ってきた文字列は、私たちが必要とするUploadJsonResult
オブジェクトに解析されました.現在はenqueue
方法を呼び出すだけで、非同期要求ができます.コードアドレス
https://github.com/flyingzhao/RxJavaPolling/blob/master/app/src/main/java/com/optimais/pollingtest/UpLoadImage.java