0

私のコードは次のとおりです。

RestClient client = new RestClient();
        Disposable subscribe = client.getApiMovie().getTopRated()
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe( data -> { Log.d("mytag", data.body().toString()) });

そのコードは正しいですか。PS: Android Studio 2 を使用していますが、ラムダ式を使用するにはどうすれば設定できますか?

私の RestClient コンストラクター:

//what adapter shall I use?
    public RestClient(){
            if( client == null ) {
                client = new Retrofit.Builder()
                        .baseUrl(BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .client(getHttpClient())
                        .build();
            }
        }

build.gradle:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"
    defaultConfig {
        applicationId "com.example.username.sunshine.app"
        minSdkVersion 21
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        jackOptions {
            enabled true
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

jackOptions と compileOptions を追加することで、Lambda 構文が機能するようになりました。

4

2 に答える 2

1

はい、そうです。API クライアントは Observable を返す必要があります。Retrofit ライブラリは、オブザーバブルを返すために「アダプタ ファクトリ」を利用できます。これがカスタム RestClient で、Observable を手動で作成する場合は、Observable.defer(()-> yourTask) を使用することを忘れないでください。Retrolambda というライブラリがあり、ラムダを使用できますが、最新の AndroidStudio では動作せず、AndroidStudio が代わりに Jack を使用することを提案するという問題に直面しました。現在、レトロラムダを使用しています。

于 2016-11-06T23:22:04.263 に答える
1

Rx で Retrofit を使用する場合は、Rx 用の呼び出しアダプターを追加することを忘れないでください。

client = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .client(getHttpClient())
                    .build();

あなたがこのようにやっているなら、あなたは正しいことをしています。より良いマッピングのために、残りのクライアントはあなたのオブジェクトで Observable を返す必要がありますObservable<List<Movie>> getApiMovie();。これは映画のリストを返します。ムービー オブジェクトには、 で注釈が付けられた API のすべてのプロパティが含まれている必要があります@SerializedName("objectName")

RxJava 2 を使用.addCallAdapterFactory(RxJava2CallAdapterFactory.create())しているため、依存関係を使用しcompile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'ます。詳細はこちら.

于 2016-11-07T08:58:45.307 に答える