#android #constructor-injection
#Android #конструктор-инъекция
Вопрос:
Для моего проекта Android большая часть данных сохраняется из базы данных, и мое приложение извлечет их. Однако у меня есть два диалоговых окна, в которых будут установлены даты в двух текстовых представлениях, а затем сохранены в моей базе данных. Я пытаюсь использовать currentBeach.setCheckIn(checkInTV.getText().toString()), что приводит к тому, что моя программа выдает ошибку в конструкторе. Для чего здесь решение?
Details.java
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Database(getBaseContext()).addToCart(new Order(
menuID,
currentBeach.getName(),
currentBeach.getPrice(),
currentBeach.setCheckIn(checkInTV.getText().toString()),
currentBeach.setCheckOut(checkOutTV.getText().toString())
));
Intent intent = new Intent(details.this, Cart.class);
startActivity(intent);
}
});
Порядок.Java (конструктор)
public Order(String productId, String productName, String description, String price, String checkIn, String checkOut) {
ProductId = productId;
ProductName = productName;
Description = description;
Price = price;
this.checkIn = checkIn;
this.checkOut = checkOut;
}
Помогите мне, пожалуйста. Спасибо всем 🙂
Ответ №1:
Вы не передаете description
в качестве аргумента в Order
конструкторе
Ваш Order
конструктор имеет 6 аргументов, в то время как вы передаете 5 аргументов внутрь btnSubmit.setOnClickListener()
проверьте это
Другая проблема заключалась в том, что currentBeach.setCheckIn(checkInTV.getText().toString())
и currentBeach.setCheckOut(checkOutTV.getText().toString()
этот метод возвращал void, в то время как вам нужно передать String
значение в Order
конструкторе
ПРИМЕР КОДА
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Database(getBaseContext()).addToCart(new Order(
menuID,
currentBeach.getName(),
"description",// pass descriptiion here
currentBeach.getPrice(),
checkInTV.getText().toString(),
checkOutTV.getText().toString())
));
Intent intent = new Intent(details.this, Cart.class);
startActivity(intent);
}
});
Комментарии:
1. проблема на самом деле не в этом, а в currentBeach.setCheckIn(checkInTV.getText().toString()) и currentBeach.setCheckOut(checkOutTV.getText().toString()). он говорит void, недействительный
2. Это решает проблему, но позвольте мне сначала попробовать мой эмулятор и проверить, сохраняется ли он в моей базе данных. Большое спасибо.