如何使用 rxjava 和 rxandroid 在图像视图上设置可绘制对象



我可以使用Textview在代码中使用rxjava和rxandroid的文本。现在我正在考虑用图像视图替换文本视图并在图像视图上显示可绘制对象。但是我遇到了错误。因为我是 rxjava 的新手,我可能确定我错过了一些东西。帮助真的是gr8!

由于为了显示文本,我们使用参数作为字符串...所以我想到一个可绘制对象,我想我可能需要这个参数作为可绘制对象......但它给出的错误..

package com.prajwal.rxjava_rxandroid;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;

import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
ImageView textView;
Observable<Integer> stringObservable;
DisposableObserver<Drawable> disposableObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textview);
stringObservable = Observable.just(R.drawable.ic_launcher_background);

disposableObserver = new DisposableObserver<Drawable>() {
@Override
public void onNext(Drawable drawable) {
Glide.with(getApplicationContext()).load(drawable).into(textView);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
stringObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(disposableObserver);
}
@Override
protected void onDestroy() {
super.onDestroy();
disposableObserver.dispose();
}
}

错误:无法解析方法订阅(可绘制(

找出解决方案:

package com.prajwal.rxjava_rxandroid;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;

import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
ImageView textView;
Observable<Integer> stringObservable;
DisposableObserver<Integer> disposableObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textview);
stringObservable = Observable.just(R.drawable.ic_launcher_background);

/*
stringObserver = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
textView.setText(s); //emitted data is set to textview.
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
*/
disposableObserver = new DisposableObserver<Integer>() {
@Override
public void onNext(Integer integer) {
Glide.with(getApplicationContext()).load(integer).asBitmap().into(textView);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
stringObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(disposableObserver);
}
@Override
protected void onDestroy() {
super.onDestroy();
disposableObserver.dispose();
}
}

我将参数作为可绘制对象传递,而我需要传递 参数作为整数,因为 Glide 的 .load(( 不将可绘制对象作为 一个参数。

最新更新