我试图使用rxjava .zip合并两个livedata对象。这就是我到目前为止所拥有的。
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.util.Consumer;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.myapplication.API.model.OrderRows;
import com.example.myapplication.API.model.Orders;
import java.util.function.BiFunction;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button myButt;
private MainViewModel mvw;
private TextView myView;
@RequiresApi(api = Build.VERSION_CODES.N)
@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);
final Observer<Orders> obsOrders = new Observer<Orders>() {
@Override
public void onChanged(Orders orders) {
Log.i("order obs", "order obs");
}
};
final Observer<OrderRows> obsOrderRow = new Observer<OrderRows>() {
@Override
public void onChanged(OrderRows orders) {
Log.i("orderRows obs", "orderRow obs");
}
};
mvw.getAllOrders().observe(this,obsOrders);
mvw.getAllOrderRows().observe(this,obsOrderRow);
Observable.zip(obsOrderRow,obsOrders,mergeItems())
.subscribe(printer());
}
@RequiresApi(api = Build.VERSION_CODES.N)
@NonNull
private BiFunction<OrderRows, Orders, String> mergeItems() {
return new BiFunction<OrderRows, Orders, String>() {
@Override
public String apply(OrderRows orderRows, Orders orders) {
return "asd";
}
};
}
@NonNull
private Consumer<String> printer() {
return new Consumer<String>() {
@Override
public void accept(String s) {
Log.i("merged",s);
}
};
}
@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();
}
}
}问题在于,当我尝试运行.zip函数时,我会得到以下错误。
错误:没有找到适合于zip(观察者、观察者、BiFunction) Observable.zip(obsOrderRow,obsOrders,mergeItems())的方法^^
增加了进口,这样你们就可以看到了。
发布于 2020-03-12 13:13:52
你使用错误的BiFunction。
你有:
import java.util.function.BiFunction;而zip则选择io.reactivex.functions.BiFunction。
https://stackoverflow.com/questions/60643382
复制相似问题