我尝试了几天,以某种方式成功创建了数据库和表,但我就是做不到,我非常需要你的帮助。我的数据库总是空的,我什至不创建表。 :/
这是我的类(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/