Java 正在等待使用MediaLiveData触发两个onChange
我目前正在尝试学习如何使用MediaLiveData,如下所述: 我要做的是等待两个livedata对象得到更新,然后对这两个对象执行一些逻辑 所以在我的活动中,我得到了这个。虽然这样做有效,但我目前只收到订单,而我希望等待订单和订单行完成,然后进行一些更改Java 正在等待使用MediaLiveData触发两个onChange,java,android,Java,Android,我目前正在尝试学习如何使用MediaLiveData,如下所述: 我要做的是等待两个livedata对象得到更新,然后对这两个对象执行一些逻辑 所以在我的活动中,我得到了这个。虽然这样做有效,但我目前只收到订单,而我希望等待订单和订单行完成,然后进行一些更改 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button myButt; pri
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);
}
});
返回所有箭头;
}
}
这也是我的问题,你找到答案了吗?