java - ROOM Android SQLite 数据库 - 无法创建表

标签 java android android-room

我尝试了几天,以某种方式成功创建了数据库和表,但我就是做不到,我非常需要你的帮助。我的数据库总是空的,我什至不创建表。 :/

这是我的类(class):

实体:

@Entity (tableName = "users")
class User {

    @ColumnInfo(name = "id")
    @PrimaryKey(autoGenerate = true)
    private
    long id;

    @ColumnInfo(name = "first_name")
    private
    String firstName;

    @ColumnInfo(name = "last_name")
    private
    String lastName;

    User(String firstName, String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }

    long getId() {
        return id;
    }

    String getFirstName() {
        return firstName;
    }

    String getLastName() {
        return lastName;
    }

    public void setId(long id) {
        this.id = id;
    }

}

DAO:

@Dao
public interface UserDao {

    @Insert
    long insertData(User user);

    @Update
    void updateData(User user);

    @Delete
    void deleteData(User user);
}

数据库:

@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class UserDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

存储库:

class UserRepository {

    private Context context;
    private String DB_NAME = "userdb.db";
    private UserDatabase userDatabase;

    UserRepository(Context context){
        this.context = context;
        userDatabase = Room.databaseBuilder(context, UserDatabase.class, DB_NAME).build();

        Toast.makeText(context, "Database created...", Toast.LENGTH_SHORT).show();
    }

    @SuppressLint("StaticFieldLeak")
    void insertTask(User user){
        new AsyncTask<Void, Void, Void>(){
            @Override
            protected Void doInBackground(Void... voids) {
                long result = userDatabase.userDao().insertData(user);
                Log.d("LOG", String.valueOf(result));
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show();
            }
        }.execute();
    }
}

MAINACTIVITY(我从两个 edittext 获取文本并传递给实体类)

public class MainActivity extends AppCompatActivity {

    EditText first_Name, last_Name;
    Button save_btn;

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

        first_Name = findViewById(R.id.first_name);
        last_Name = findViewById(R.id.last_name);
        save_btn = findViewById(R.id.save_btn);
        save_btn.setOnClickListener(view -> {
            UserRepository userRepository = new UserRepository(MainActivity.this);
            User user = new User(first_Name.getText().toString().trim(),
                    last_Name.getText().toString().trim());
            userRepository.insertTask(user);
        });
    }

最佳答案

I dont even create the table

已知工作 Toast 看到的日志具有 D/LOG: 1

您复制数据库(仅 userdb.db 文件)并使用工具(如 DB SQLite 浏览器)看到数据库为空。

需要复制 userdb.db 和 userdb.db-wal 才能在工具中看到。

-wal 更改未设置检查点

关于java - ROOM Android SQLite 数据库 - 无法创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59912968/

相关文章:

java - 正确的时钟以提高 Java 的准确性

java - 10毫秒分辨率的定时器android

android - 如何通过套接字读取 HTTP 响应?

具有 AutoValue 的 Android Room Persistence 库实体

android - 当 room android db 损坏时会发生什么?

java - 如何在 Room 2.3.0 中向我的实体添加外键?

java - 验证命令行参数用户输入

java - 使用 JDialog 的静态输入对话框

java - Lucene 3.5 搜索时不支持中文、俄语、韩语

Android Wear 通过 WiFi TCP/IP 启用 ADB 连接