2017-04-06 7 views
-2

私は数字だけをしたいが、これは私がログを受けてるものです:RxJavaを解析して、必要なデータだけを受け取る方法は?

[Boletim(グレード= 4.5)、Boletim(グレード= 9.5)]

応答:

public class GradeResponse { 

    @Inject 
    Retrofit retrofit; 

    @Inject 
    MainPresenter mainPresenter; 

    public void getGradeRx() { 

     MyApplication.getMainComponent().injectIntoGradeResponse(this);// informando ao dagger sobre o uso de um component e a necessidade de injetar dependência 

     Subscription getGrade = retrofit 
       .create(GradeService.class) 
       .getGrade() 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .map(model -> { 

        return model.getBoletim(); 

       }) 
       .subscribe(new Observer<Boletim[]>() { 
        @Override 
        public void onCompleted() { 

        } 

        @Override 
        public void onError(Throwable e) { 
         Log.i(TAG, "saporra vai me matar ainda"); 
        } 

        @Override 
        public void onNext(Boletim[] grades) { 
         Log.i(TAG, Arrays.asList(grades).toString()); 
        } 
       }); 
    } 
} 

モデル:

GradeModel:

@SerializedName("boletim") 
    @Expose 
    private Boletim[] boletim; 

Boletim.class

public class Boletim { 

    @SerializedName("grade") 
    @Expose 
    private double grade; 

換装サービスは、依存性の注入が働いている、okです。私はちょうど今、「Boletim(グレード= [」このずに数字だけを受ける必要がある、rxJavaからするonSuccessメソッドを受けています。

+0

flter演算子は、ここを参照してくださいflatMapを使用したくない場合は、onNext

にforループを入れることができます - https://github.com/ReactiveX/ RxJava/wiki/Filtering-Observables – StuStirling

+0

'Arrays.asList(grades).toString()'は使用しないでください。 –

+0

@LyubomyrShaydariv私はそれから何を使うべきですか? –

答えて

1

をあなたのオブジェクトののtoStringを見ているあなたは、あなたの全体のオブジェクトを取得するため、この "[Boletim(グレード=" なしのマップ!

数字のみ。

ウェイは、あなたが再びマッピングし、それを抽出することはできません?

.map(model -> {    // This map returns a Boletim[] 
    return model.getBoletim(); 
}) 
.map(boletim -> {    // This map returns a double[] 
    Double grades = new Double[boletim.length]; 
    for (int i =0; i < grades.length ; i++) { 
     grades[i] = boletim[i].getGrade() ; 
    } 
    return grades; 
}).subscribe(new Observer<Double[]>() { // This subscribes to a double[] 
    @Override 
    public void onCompleted() { 

    } 

    @Override 
    public void onError(Throwable e) { 
     Log.i(TAG, "saporra vai me matar ainda"); 
    } 

    @Override 
    public void onNext(Double[] grades) { 
     Log.i(TAG, Arrays.toString(grades)); 
    } 
} 

それとも、配列の観察可能で、その後、

+0

動作しませんでした。 "メソッドの購読を解決できません"と言っているためです。 –

+0

そして、onNextの内部に入れても、Boletim型が必要であり、そのループはdouble型です。 –

+0

私の論理の何かが間違っています。 –

関連する問題