java - 房间数据库实例无法解析 DAO 方法的符号

标签 java android android-room

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

db.itemDao().insert(item);

主 Activity .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);
            }
        });
    }
}

项目.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);
}

我的数据库.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;
    }
}

最佳答案

您的 dbRoomDatabase 类型。 RoomDatabase 没有 itemDao() 方法,您的 MyDatabase 扩展它有。因此,如果您希望能够访问 itemDao()

,则此字段应为 MyDatabase 类型

关于java - 房间数据库实例无法解析 DAO 方法的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64884063/

相关文章:

java - Android-如何通过按钮标签获取资源?

java - 错误 : constraint for relation already exists with hibernate 4. 3.1

java - 匹配以 X 开头以 Y 结尾的字符串?

Android ListView 自定义适配器 ImageButton

android - 单击“ float 操作”按钮时,我的应用程序崩溃:只有创建 View 层次结构的原始线程才能触摸其 View

java - 房间数据库实体初始化

android - 如何使用 Android Room 在 DAO 类中正确获取表名

java - 如何在 Mac 上使用 Jib 对 Java 应用程序进行 docker 化

android - 如何从 Flutter Plugin 访问 Android 资源字符串

android - 如何在 Android 中重启设备后启动服务