【问题标题】:Room database instance cannot resolve symbol of DAO methods房间数据库实例无法解析 DAO 方法的符号
【发布时间】:2020-11-17 22:09:22
【问题描述】:

当尝试使用 Room Library 进行数据库处理时,Android Studio 无法解析 MainActivity 中 itemDao() 方法的符号:

db.itemDao().insert(item);

MainActivity.java

public class MainActivity extends AppCompatActivity {

    Button btn;
    EditText et;
    TextView tv;
    RoomDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = findViewById(R.id.button);
        et = findViewById(R.id.editText);
        tv = findViewById(R.id.textView);

        db = MyDatabase.getInstance(this);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Item item = new Item();
                item.info = et.getText().toString();
                tv.setText(item.info);
                db.itemDao().insert(item);
            }
        });
    }
}

Item.java

@Entity(tableName = "tableItems")
public class Item {
    @PrimaryKey(autoGenerate = true)
    public int uid;

    @ColumnInfo(name = "info")
    public String info;
}

ItemDao.java

@Dao
public interface ItemDao {
    @Query("SELECT * FROM tableItems")
    List<Item> getItemsList();

    @Insert
    void insert(Item item);

    @Delete
    void delete(Item item);
}

MyDatabase.java

@Database(entities = {Item.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {

    public abstract ItemDao itemDao();
    private static MyDatabase INSTANCE;
    private static final String DATABASE_NAME = "MyDatabase";

    public synchronized static MyDatabase getInstance(Context context) {
        if (INSTANCE == null) {
            INSTANCE = Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, DATABASE_NAME)
                    .allowMainThreadQueries()
                    .build();
        }
        return INSTANCE;
    }
}

【问题讨论】:

    标签: java android android-room


    【解决方案1】:

    您的db 是RoomDatabase 类型。 RoomDatabase 没有 itemDao() 方法,您的 MyDatabase 扩展它有。因此,如果您希望能够访问itemDao(),则该字段应为MyDatabase 类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 2022-11-30
      • 2015-11-20
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 2023-03-17
      • 2018-11-11
      相关资源
      最近更新 更多