【问题标题】:I can not update an item list in the database room and add the item to the favorites list我无法更新数据库室中的项目列表并将该项目添加到收藏夹列表
【发布时间】:2021-10-10 20:25:14
【问题描述】:

我无法通过点击添加到收藏夹来设置 isfavorites 值。 Android Studio 显示 ringTonesDao 的空指针异常。 我不知道如何解决这个错误。 另一方面,因为 ringTonesDao 是一个接口,如果我将它的值设置为 new RingTonesDao,我必须设置它的所有功能。

这是 RingTonesAdapter

//Imports and Package name
public class RingTonesAdapter extends 
RecyclerView.Adapter<RingTonesAdapter.ringTonesViewHolder> {
private List<RingTones> ringTonesList;
RingTonesDao ringTonesDao; //  <--This is null in logcat


public RingTonesAdapter(List<RingTones> ringTonesList) {
    this.ringTonesList = ringTonesList;
}

@NonNull
@Override
public ringTonesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.actv_main_list, 
 parent, false);
    return new ringTonesViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ringTonesViewHolder holder, int position) {
    //Set RingTone name to TextView
    //Set RingTone Btn
    //Set Alarm Btn
    //Set Notification Btn
    //Add To Favorites Btn

    if (ringTonesList.get(position).isFavorite()) {
        holder.btn_addToFavorites.setImageResource(R.drawable.ic_favorites);
    } else {
        holder.btn_addToFavorites.setImageResource(R.drawable.ic_addtofavorites);
    }
   

   holder.btn_addToFavorites.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                Long id = ringTonesList.get(position).getId();
                ringTonesDao.update(true,id);
            }catch (NullPointerException e){
                Toast.makeText(v.getContext(),"Null Pointer 
     Exception",Toast.LENGTH_LONG).show();
            }
        }
    });

    //Set Play Btn

    //ringTonesViewHolder and count items

这是 RingTonesDao

//import and package

 @Dao
 public interface RingTonesDao {

@Insert
Long add(RingTones ringTones);

@Delete
int delete(RingTones ringTones);

@Query("SELECT * FROM tbl_ringtones")
List<RingTones> getRingTones();

@Query("SELECT * FROM tbl_ringtones WHERE favorites>0 ")
List<RingTones> favorites();

@Query("DELETE FROM tbl_ringtones")
void deleteAll();

@Query("UPDATE tbl_ringtones SET favorites=:favorites WHERE id=:id")
int update (Boolean favorites ,Long id);

 }

【问题讨论】:

标签: database sqlite android-room favorites


【解决方案1】:

你需要做这样的事情

DatabaseClient.getInstance(v.getContext()).getAppDatabase()
                    .RingTonesDao()
                    .update(true,id);

了解更多如何使用 Rom 数据库:from this example


Java中的布尔值和布尔值也有区别,
在您的情况下,请尝试在更新函数中使用 `boolean` 而不是 `Boolean`。

【讨论】:

  • 我这样做了,但问题没有解决
  • 查看我的答案更新
  • 我是新手程序员,不知道你说的代码在哪里以及如何写
  • 感谢您的指导。解决了我的问题。
  • 我写道: ringTonesDao = AppDatabase.getAppDatabase (v.getContext ()) .getRingtonesDao (); long id = ringTonesList.get(位置).getId(); ringTonesDao.update (true, id);
猜你喜欢
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 2019-08-18
相关资源
最近更新 更多