Gson解析を使ってRetrofitを返します.

3462 ワード

RetrofitとRxJavaシリーズのブログ:Retrofitを使ってファイルをアップロードし、Gson解析Retrofitを使って結果RetrofitとRxJavaを結合して、RetrofitとRxJavaを使ってポーリングを行います.
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つのフィールドを受け入れる必要があります.それぞれmessageflagaddDateです.
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