У меня есть база данных SQLite для моего Android приложения. В базе данных есть таблица для свойств и еще одна таблица для ремонта для каждого свойства.
Ремонт стола :
@Entity(tableName = "repairs",
indices = {@Index(value = "repairID", unique = true), @Index("repairPropID")})
public class MYRepairs
{
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "repid")
public int id;
@ColumnInfo(name = "repairID")
@NonNull
public String repairID;
@ColumnInfo(name = "repairPropID")
public int repairPropID;
}
...
а затем RepairsDao. java
@Dao
public interface MyRepairsDao
{
@Query("SELECT * FROM repairs WHERE repid = :repid LIMIT 1")
MYRepairs findRepairById(String repid);
@Query("SELECT * FROM repairs WHERE repairPropID = :repairPropID")
MYRepairs findRepairByPropID(int repairPropID);
@Query("SELECT * FROM repairs ORDER BY repairPropID ASC")
LiveData<List<MYRepairs>> getAllRepairs();
@Query("SELECT * FROM repairs WHERE repairPropID = :repairPropID")
LiveData<List<MYRepairs>> getPropertyRepairs(int repairPropID);
}
В ViewModel :
public class repairViewModel extends AndroidViewModel
{
private MyRepairsDao myRepairDao;
private LiveData<List<MYRepairs>> repairLiveData;
private LiveData<List<MYRepairs>> repairPropertyLiveData;
private LiveData<String> filterLiveData = new MutableLiveData<String>();
public repairViewModel(@NonNull Application application)
{
super(application);
myRepairDao = DogwoodDatabase.getDatabase(application).repairDao();
repairLiveData = myRepairDao.getAllRepairs();
repairPropertyLiveData = myRepairDao.getPropertyRepairs(propertyID);
}
public LiveData<List<MYRepairs>> getAllRepairs()
{
return repairLiveData;
}
public LiveData<List<MYRepairs>> getPropertyRepairs(int propertyID)
{
return repairPropertyLiveData;
}
И в RecyclerView.Adapter :
public class repairListAdapter extends RecyclerView.Adapter<repairListAdapter.RepairViewHolder>
{
@NonNull
@Override
public repairListAdapter.RepairViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
final View itemView = layoutInflater.inflate(R.layout.repaircontent, parent, false);
return new repairListAdapter.RepairViewHolder(itemView);
}
В repairFragment - мы хотим просмотреть только ремонт для выбранного пользователем свойства . Код собственности propertyID получен repairFragement . Это известно initData ()
public class repairFragment extends Fragment
{
private repairListAdapter repairListAdapter;
private repairViewModel repairViewModel;
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
propertyID = getArguments().getString("ARG_PROPNUM_ID");
propNumID = Integer.parseInt(propertyID);
initData();
}
private void initData()
{
Log.e ("INIT", "ID is " + propertyID);
repairViewModel = new
ViewModelProvider(this).get(repairViewModel.class);
repairViewModel.getPropertyRepairs(propertyID).observe(this, new Observer<List<MYRepairs>>()
{
@Override
public void onChanged(@Nullable List<MYRepairs> MYRepairs)
{
repairListAdapter.setMYRepairList(MYRepairs);
}
});
}
Это не возвращает НИКАКИХ ЗАПИСЕЙ. В идеальном мире в моей собственности не было бы ремонта, но я не живу в этом мире!
Я просмотрел эту доску в поисках помощи по фильтрации.
Можете ли вы помочь мне с тем, как отфильтровать только для ремонта, выбранного пользователем свойства (propertyID).
Спасибо, Рэйчел