Android 如何在 RxJava 中过滤数据

How to Filter Data in RxJava in Android

这是我需要筛选的 Json 个数据。

{
    "id": 1,
    "game_name": "Bắn cá 2021",
    "game_menu": "Lời khuyên",
    "subtitle": "Sử dụng chiến thuật ria đạn",
    "description": "Chiến lược này phù hợp cho người mới bắt đầu. Để tiết kiệm đạn và tăng khả năng chiến thắng, bạn nên tiêu diệt cá nhỏ. Đây là một trong những cách chơi nổi tiếng. Nhiều người chơi bỏ qua những con cá nhỏ này và luôn nhìn vào những con cá lớn. Thật là sai lầm! Đối với người mới bắt đầu, đây không phải là một cách hay. Nếu bạn áp dụng lối suy nghĩ giống như những người chơi khác, bạn chắc chắn sẽ mất hết vốn!",
    "image": null
},
{
    "id": 2,
    "game_name": "Bắn cá 2021",
    "game_menu": "Lời khuyên",
    "subtitle": "Bắn cá ngay khi chúng xuất hiện",
    "description": "Khi nó xuất hiện, hãy nhắm ngay lập tức. Bằng cách này, bạn chắc chắn sẽ nhận được nhiều xu thay vì bắn theo được những con cá lớn.",
    "image": null
},{
    "id": 9,
    "game_name": "Săn Cá Mập ",
    "game_menu": "Lời khuyên",
    "subtitle": "Những Điều Cần Lưu Ý Khi Chơi Game Bàn Cá Trực Tuyến",
    "description": "1. Game bắn cá ăn tiền thật trực tuyến dựa trên giao diện đẹp, bắt mắt, nhạc nền sống động, màu sắc tươi sáng và sử dụng đồ họa 3D tinh tế, hình ảnh sắc nét. Người chơi sẽ trở thành một xạ thủ thực hiện chuyến đi săn dưới lòng đại dương sau khi tham gia.",
    "image": null
},
{
    "id": 10,
    "game_name": "Săn Cá Mập ",
    "game_menu": "Lời khuyên",
    "subtitle": "Những Điều Cần Lưu Ý Khi Chơi Game Bàn Cá Trực Tuyến",
    "description": "2 . Vũ khí của bạn là một khẩu súng để giết cá. Sau khi bắn hạ, mỗi con cá khác nhau sẽ cho bạn một số xu nhất định.",
    "image": null
},
{
    "id": 11,
    "game_name": "Săn Cá Mập ",
    "game_menu": "Lời khuyên",
    "subtitle": "Những Điều Cần Lưu Ý Khi Chơi Game Bàn Cá Trực Tuyến",
    "description": "3: Người chơi cần bỏ ra một số tiền để có thể mua đạn để bắn và đổi lại khi bạn có vũ khí trong tay thì việc bắn cá sẽ trở nên đơn giản hơn. Dễ bắn và khả năng kiếm được tiền sẽ cao hơn trông thấy.",
    "image": null
}

这是我的“ViewModel”Class

public class TipsViewModel extends ViewModel {


private static final String TAG = "TipsViewModel";

private Repository repository;
private MutableLiveData<List<TipsModel>> tipsList = new MutableLiveData<>();


@ViewModelInject
public TipsViewModel(Repository repository){
    this.repository = repository;
}


public MutableLiveData<List<TipsModel>> getTipsList(){
    return tipsList;
}




//This function is where i want to filter the data from json.
public void getTips(){
    repository.getTips()
            .flatMap(Observable::fromIterable)
            .filter(result -> result.getGameName().equals("Bắn cá 2021"))
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(result -> tipsList.setValue(result),
                    error -> Log.e(TAG,"getTips: "+ tipsList.toString()));
}
}

我想过滤我从 json 获得的数据。我只使用“game_name”属性显示包含“Bắn cá 2021”的所有数据。我做的“getTips”函数有一些错误。

E/TipsViewModel: getTips: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

这是我第一次在android中使用rxjava。

您可以使用 doOnNext 方法或 forEach:

查看您的流中发生的事情
public void getTips(){
    repository.getTips()
            .flatMap(Observable::fromIterable)
            //check if e.getGameName() is not null
            .doOnNext(e->System.out.println(e.getGameName())) 
            .filter(result -> result.getGameName().equals("Bắn cá 2021"))
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(result -> tipsList.setValue(result),
                    error -> Log.e(TAG,"getTips: "+ tipsList.toString()));
}

或者,如果您希望 gameName 值为空,则可以更改比较:

.filter(result -> "Bắn cá 2021".equals(result.getGameName()))