Доброе утро,
Я опытный программист, но новичок в разработке Android. Это то, что я в конце концов хочу работать. Я делаю систему продажи для пекарни. У меня есть предварительная база данных с одной таблицей, где каждая строка содержит имя, цену, а также другие предметы каждого продукта. Основная активность состоит из нескольких фрагментов. Почти во всех фрагментах есть переработка для хранения информации о продукте. Есть мексиканское тесто под названием Conchas. Я нахожусь в точке, когда я могу показать все различные типы конч в переработке, где пользователь приложения Android Point of Sale может выбрать, какой тип кончики они хотят вместе с количеством кончений. После нажатия кнопки выбранные продукты попадают в переработку, который существует в другом фрагменте. В фрагменте, где перечислены кончики, я могу получить данные, которые существуют в базе данных комнаты, и использовать информацию в моем приложении в качестве Livedata. Вот фрагменты кода, чтобы лучше объяснить мою ситуацию: < /p>
Объект базы данных, созданный как Singleton: < /p>
`@database (entities = {product.class}, версия = 1)
public Abstract Class Posdatabase extends poomdatabase {< /p>
public abstract ProductDAO getProductDAO();
private static POSDatabase dbInstance;
public static synchronized POSDatabase getInstance(Context context) {
if(dbInstance == null){
dbInstance = Room.databaseBuilder(
context.getApplicationContext(),
POSDatabase.class,
"pos.db").
createFromAsset("database/initial_pos.db").
fallbackToDestructiveMigration().build();
}
return dbInstance;
}
< /code>
} `< /p>
DAO Методы, которые я использую из интерфейса DAO: < /p>
` @dao
product productdao {< /p>
@Insert
void insert(Product product);
@Delete
void delete(Product product);
@Update
void updateProducts(List products);
@Query("SELECT * FROM products_table WHERE outer_product_name = :outerProduct")
LiveData getCorrespondingInnerProducts(String outerProduct);
@Query("SELECT * FROM products_table")
LiveData getAll();
< /code>
} `< /p>
Соответствующий репозиторий: < /p>
` public class Repository {< /p>
private final ProductDAO productDAO;
ExecutorService executor;
Handler handler;
public ProductDAO getProductDAO(){
return productDAO;
}
public Repository(Application application) {
POSDatabase posDatabase = POSDatabase.getInstance(application);
this.productDAO = posDatabase.getProductDAO();
executor = Executors.newSingleThreadExecutor();
handler = new Handler(Looper.getMainLooper());
}
public void insertProduct(Product product){
executor.execute(new Runnable() {
@Override
public void run() {
productDAO.insert(product);
}
});
}
public void deleteProduct(Product product){
executor.execute(new Runnable() {
@Override
public void run() {
productDAO.delete(product);
}
});
}
public void updateProducts(List products){
executor.execute(new Runnable() {
@Override
public void run() {
productDAO.updateProducts(products);
}
});
}
public LiveData getCorrespondingInnerProducts(String outerProduct){
return productDAO.getCorrespondingInnerProducts(outerProduct);
}
public LiveData getAllProducts(){
return productDAO.getAll();
}
< /code>
} `< /p>
Часть моего класса ViewModel. Слишком долго, чтобы показать все: < /p>
`private livedata conchanormal;
private Repository myrepository; < /p>
public POSViewModel(@NonNull Application application){
super(application);
this.myRepository = new Repository(application);
this.conchaNormal = this.myRepository.getCorrespondingInnerProducts("concha normal");
}
< /code>
public livedata getConChanorMal () {
return Conchanormal;
} `< /p>
Итак, в функции Oncreatevie Получен из предварительной базы данных) просто хорошо. Если я запускаю следующий код: < /p>
'LiveData test = posViewModel.getConchaNormal();
if(test.getValue() != null){
Log.i("Miguel", "From Live Data: Number of Conchas normal size " + test.getValue().size());
}
else{
Log.i("Miguel", "I was correct with the error.");
}'
< /code>
Я захожу в верхнюю часть оператора if (test.getValue ()! = NULL) является правдой и в журналах 'из живых данных: количество CONCHAS Нормальный размер 4' < /p>
Но (вот мой вопрос): когда я запускаю этот точный код в функции на функции MainActivity. Включая, что у меня есть еще одно действие, в котором в нем есть другой фрагмент, и в этом фрагменте, если я запускаю один и тот же код в рамках этого фрагмента, я также получаю test.getValue (), равный null. < /P>
Почему я не могу получить эту информацию в этих двух последних местах кода? Просто чтобы сообщить вам, где test.getValue () не является null i, Recyclerview показывает эту информацию. Но в последних местах нет никаких объектов представления, показывающих эту информацию. Заранее спасибо.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... pulated-ro