Java 正在等待使用MediaLiveData触发两个onChange

Java 正在等待使用MediaLiveData触发两个onChange,java,android,Java,Android,我目前正在尝试学习如何使用MediaLiveData,如下所述: 我要做的是等待两个livedata对象得到更新,然后对这两个对象执行一些逻辑 所以在我的活动中,我得到了这个。虽然这样做有效,但我目前只收到订单,而我希望等待订单和订单行完成,然后进行一些更改 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button myButt; pri

我目前正在尝试学习如何使用MediaLiveData,如下所述: 我要做的是等待两个livedata对象得到更新,然后对这两个对象执行一些逻辑

所以在我的活动中,我得到了这个。虽然这样做有效,但我目前只收到订单,而我希望等待订单和订单行完成,然后进行一些更改

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button myButt;
    private MainViewModel mvw;
    private TextView myView;
    private MediatorLiveData data;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        mvw = new ViewModelProvider(this).get(MainViewModel.class);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myButt = findViewById(R.id.button);
        myView = findViewById(R.id.textview);
        myButt.setOnClickListener(this);

        data =  new MediatorLiveData<>();
        data.addSource(mvw.getAllOrders(), new Observer<Orders>() {
            @Override
            public void onChanged(Orders orders) {
                data.setValue(orders);
            }
        });
        data.addSource(mvw.getAllOrderRows(), new Observer<OrderRows>() {
                    @Override
                    public void onChanged(OrderRows orderRows) {
                        data.setValue(orderRows);

                    }
        });
        data.observe(this, new Observer<Orders>() { //this observers Orders but how do i get orders AND orderrows?
                    @Override
                    public void onChanged(Orders order) {
                        myView.setText(mvw.extractDate(order)); 
                         //Here i want to manipulate order and orderrows
                        Log.i("livedata" , order.getOrders().toString());
                    }
                });

    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){
            case R.id.button:
                Log.i("button","clicked");
                mvw.updateOrderData(); // calls for new values to be fetched
                mvw.updateOrderRowData();
        }
    }
}
public类MainActivity扩展AppCompatActivity实现View.OnClickListener{
私人按钮;
私有主视图模型mvw;
私有文本视图myView;
私有数据;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
mvw=新的ViewModelProvider(this.get)(MainViewModel.class);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButt=findViewById(R.id.按钮);
myView=findviewbyd(R.id.textview);
myButt.setOnClickListener(this);
data=新的MediatorLiveData();
data.addSource(mvw.getAllOrders(),new Observer()){
@凌驾
更改后的公共作废(订单){
数据设置值(订单);
}
});
data.addSource(mvw.getAllordErrors(),new Observer()){
@凌驾
更改后的公共void(OrderRows OrderRows){
data.setValue(orderRows);
}
});
data.observe(this,new observator(){//this observators命令,但如何获取命令和命令行?
@凌驾
更改后的公共作废(订单){
myView.setText(mvw.extractDate(order));
//这里我想处理order和orderrows
Log.i(“livedata”,order.getOrders().toString());
}
});
}
@凌驾
公共void onClick(视图){
开关(view.getId()){
案例R.id按钮:
Log.i(“按钮”,“点击”);
mvw.updateOrderData();//调用要获取的新值
mvw.updateOrderRowData();
}
}
}
在我的viewmodel中:

public class MainViewModel extends ViewModel {
    private GetOrder getOrderRepo;
    private MutableLiveData<Orders> allOrders;
    private MutableLiveData<OrderRows> allOrderRows;


    public MainViewModel(){
        getOrderRepo = new GetOrder();
    }

    public MutableLiveData<Orders> getAllOrders() {
        if(allOrders == null){
            allOrders = new MutableLiveData<>();
            allOrders = getOrderRepo.getAllOrders();
        }
        return  allOrders;
    }

    public MutableLiveData<OrderRows> getAllOrderRows() {
        if(allOrderRows == null){
            allOrderRows = new MutableLiveData<>();
            allOrderRows = getOrderRepo.getAllOrderRows();
        }
        return allOrderRows;
    }

    public void updateOrderData(){
        Log.i("updating","updating data");
        Orders orders = getOrderRepo.getAllOrders().getValue();
        allOrders.setValue(orders);
    }
    public void updateOrderRowData(){
        Log.i("updating","updating data");
        OrderRows orderRows = getOrderRepo.getAllOrderRows().getValue();
        allOrderRows.setValue(orderRows);
    }

    public String extractDate(Orders orders){
        ArrayList<Order> listOfOrders = orders.getOrders();
        Log.i("extractDate", ""+(listOfOrders.size()-1));
        String date = listOfOrders.get(listOfOrders.size()-1).getOrderTime();
        return date;
    }

}
public类MainViewModel扩展了ViewModel{
私人GetOrder getOrderRepo;
私有可变LiveData Allorder;
私有可变LiveData AllordErrors;
公共主视图模型(){
getOrderRepo=新的GetOrder();
}
公共可变LiveData getAllOrders(){
if(allOrders==null){
allOrders=new MutableLiveData();
allOrders=getOrderRepo.getAllOrders();
}
返回分配顺序;
}
public MutableLiveData GetAllordErrors(){
if(allOrderRows==null){
allOrderRows=new MutableLiveData();
allOrderRows=getOrderRepo.getAllOrderRows();
}
返回所有箭头;
}
public void updateOrderData(){
Log.i(“更新”、“更新数据”);
Orders=getOrderRepo.getAllOrders().getValue();
allOrders.setValue(订单);
}
public void updateOrderRowData(){
Log.i(“更新”、“更新数据”);
OrderRows OrderRows=getOrderRepo.GetAllordErrors().getValue();
allOrderRows.setValue(orderRows);
}
公共字符串提取日期(订单){
ArrayList listOfOrders=orders.getOrders();
Log.i(“extractDate”,“”+(listOfOrders.size()-1));
String date=listOfOrders.get(listOfOrders.size()-1.getOrderTime();
返回日期;
}
}
在报告中

public class GetOrder {
    private ApiService mAPIService;
    MutableLiveData<Orders> allOrders;
    MutableLiveData<OrderRows> allOrderRows;

    public GetOrder(){
        mAPIService = ApiUtils.getAPIService();
        allOrders = new MutableLiveData<Orders>();
        allOrderRows = new MutableLiveData<OrderRows>();
    }
    public MutableLiveData<Orders> getAllOrders(){
        Log.i("func","starting func");
        mAPIService.getOrders().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Orders>() {
                    @Override
                    public void onCompleted() {
                        Log.i("func","onComplete");

                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i("onError",e.toString());

                    }

                    @Override
                    public void onNext(Orders orders) {
                        Log.i("Repo",orders.toString());
                        allOrders.setValue(orders);
                    }
                });
        return allOrders;
    }

    public MutableLiveData<OrderRows> getAllOrderRows(){
        Log.i("func","starting func");
        mAPIService.getOrderRows().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<OrderRows>() {
                    @Override
                    public void onCompleted() {
                        Log.i("func","onComplete");

                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i("onError",e.toString());

                    }

                    @Override
                    public void onNext(OrderRows orderRows) {
                        Log.i("Repo",orderRows.toString());
                        allOrderRows.setValue(orderRows);
                    }
                });
        return allOrderRows;
    }
}
公共类GetOrder{
私人电话服务;
可变LiveData allOrders;
可变LiveData AllordErrors;
公共秩序(){
mAPIService=aputils.getAPIService();
allOrders=new MutableLiveData();
allOrderRows=new MutableLiveData();
}
公共可变LiveData getAllOrders(){
Log.i(“func”,“启动func”);
mAPIService.getOrders().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
Log.i(“func”、“onComplete”);
}
@凌驾
公共无效申报人(可丢弃的e){
Log.i(“onError”,例如toString());
}
@凌驾
公共无效onNext(订单){
Log.i(“Repo”,orders.toString());
allOrders.setValue(订单);
}
});
返回分配顺序;
}
public MutableLiveData GetAllordErrors(){
Log.i(“func”,“启动func”);
mAPIService.getOrderRows().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
Log.i(“func”、“onComplete”);
}
@凌驾
公共无效申报人(可丢弃的e){
Log.i(“onError”,例如toString());
}
@凌驾
public void onNext(订单行订单行){
Log.i(“Repo”,orderRows.toString());
allOrderRows.setValue(orderRows);
}
});
返回所有箭头;
}
}

这也是我的问题,你找到答案了吗?