Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 房间数据库-数据不存在';I don’我第一次没露面_Java_Database_Android Studio_Android Asynctask_Android Room - Fatal编程技术网

Java 房间数据库-数据不存在';I don’我第一次没露面

Java 房间数据库-数据不存在';I don’我第一次没露面,java,database,android-studio,android-asynctask,android-room,Java,Database,Android Studio,Android Asynctask,Android Room,当我在数据库类中填充数据时,我在MainActivity中从StudentDao调用了getAllStudents方法,但是当我运行应用程序时,我的textview第一次没有显示数据。当我第二次运行应用程序时,只有这次我的文本视图显示数据。有什么问题? 这是mycode: 学生班 @Entity(tableName = "students") public class Student { @PrimaryKey(autoGenerate = true) private int

当我在数据库类中填充数据时,我在MainActivity中从StudentDao调用了getAllStudents方法,但是当我运行应用程序时,我的textview第一次没有显示数据。当我第二次运行应用程序时,只有这次我的文本视图显示数据。有什么问题? 这是mycode:

学生班

@Entity(tableName = "students")
public class Student {
@PrimaryKey(autoGenerate = true)
private int ID;
private String name;
private String email;
private String phoneNumber;

public Student(String name, String email, String phoneNumber) {
    this.name = name;
    this.email = email;
    this.phoneNumber = phoneNumber;
}

public void setID(int ID) {
    this.ID = ID;
}

public int getID() {
    return ID;
}

public String getName() {
    return name;
}

public String getEmail() {
    return email;
}

public String getPhoneNumber() {
    return phoneNumber;
}
学生道

@Dao
public interface StudentDAO {
@Insert
void InsertSingleStudent(Student student);
@Insert
void InsertAllStudents(List<Student> students);
@Delete
void DeleteSingleStudent(Student student);
@Update
void UpdateSingleStudent(Student student);
@Dao
公共接口StudentDAO{
@插入
void InsertSingleStudent(学生);
@插入
无效插入学生(列出学生);
@删除
无效的学生(学生);
@更新
无效更新单个学生(学生);
数据库类:

@Database(entities = {Student.class},version =1 ,exportSchema = false)
public abstract  class UniDatabase extends RoomDatabase {
public abstract StudentDAO studentDAO();
private static UniDatabase instance;
public static synchronized  UniDatabase getInstance(Context context) {
    if (null==instance){
        instance=Room.databaseBuilder(context,UniDatabase.class,"uni_db")
                .fallbackToDestructiveMigration()
                .allowMainThreadQueries()
                .addCallback(initialCallback)
                .build();
    }

    new PopulateInitialData(instance).execute();
    return instance;
}
private static RoomDatabase.Callback initialCallback=new RoomDatabase.Callback() 
{
    @Override
    public void onCreate(@NonNull SupportSQLiteDatabase db) {
        super.onCreate(db);

    }
};
private static class PopulateInitialData extends AsyncTask<Void,Void,Void> {
    private StudentDAO studentDAO;
    public PopulateInitialData(UniDatabase db) {
        this.studentDAO=db.studentDAO();
    }
    @Override
    protected Void doInBackground(Void... voids) {
        ArrayList<Student> studentList=new ArrayList<>();
        studentList.add(new Student("Cemal","cemal@gmail","555"));
        studentList.add(new Student("Rıza","riza@gmail","123"));
        studentDAO.InsertAllStudents(studentList);
        return null;
    }
}

}
@Database(entities={Student.class},version=1,exportSchema=false)
公共抽象类UniDatabase扩展了RoomDatabase{
公共摘要StudentDAO StudentDAO();
私有静态单数据库实例;
公共静态同步UniDatabase getInstance(上下文){
if(null==实例){
实例=Room.databaseBuilder(上下文,UniDatabase.class,“uni_db”)
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.addCallback(initialCallback)
.build();
}
新的PopulateInitialData(实例).execute();
返回实例;
}
私有静态RoomDatabase.Callback initialCallback=新建RoomDatabase.Callback()
{
@凌驾
public void onCreate(@NonNull SupportSQLiteDatabase db){
super.onCreate(db);
}
};
私有静态类PopulateInitialData扩展异步任务{
私人学生;
公众初始数据(UniDatabase db){
this.studentDAO=db.studentDAO();
}
@凌驾
受保护的空位背景(空位…空位){
ArrayList studentList=新建ArrayList();
学生列表。添加(新学生(“Cemal”)cemal@gmail","555"));
学生列表。添加(新学生(“Rıza”)riza@gmail","123"));
studentDAO.InsertAllStudents(学生名单);
返回null;
}
}
}
主要活动

 public class MainActivity extends AppCompatActivity {
 private TextView textView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView = findViewById(R.id.textView);
    UniDatabase db = UniDatabase.getInstance(MainActivity.this);
    ArrayList<Student> students = (ArrayList<Student>) 
 db.studentDAO().getAllStudents();


    String text = "";
    for (Student s : students) {
        text += "Id: " + s.getID() + "\nName: " + s.getName() + "\nEmail: " + 
 s.getEmail();

    }
    textView.setText(text);

 }
 }
public类MainActivity扩展了AppCompatActivity{
私有文本视图文本视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=findViewById(R.id.textView);
UniDatabase db=UniDatabase.getInstance(MainActivity.this);
ArrayList学生=(ArrayList)
db.studentDAO().getAllStudents();
字符串文本=”;
(学生:学生){
text++“Id:+s.getID()+”\n名称:+s.getName()+“\n邮件:”+
s、 getEmail();
}
textView.setText(text);
}
}

请参阅,如果您可以通过先从设备或模拟器中删除数据库,然后运行代码来重新创建该问题。如果再次发生这种情况,则您的数据库创建有问题


我认为,因为您的数据库正在异步任务中运行,它从不与主线程协调以让它知道数据已准备就绪。当您第二次运行应用程序时,数据已经存在,因为异步任务在您第一次运行时已完成。

“第一次我的textview不显示数据”数据是第一次出现的吗?如果不是,那是一个问题。如果是的话,你可以从你的帖子中删除所有DAO内容,因为它不相关。我的意思是,当我第一次在我的设备上运行应用程序时,textview不会显示任何内容。但是当我关闭应用程序,并在我的Android设备上重新启动它时,textview这次会显示数据。谢谢你的帮助答:在我的Android设备中,在我从Android studio运行应用程序后,我清除了应用程序中的数据库,但问题是相同的。我是否也可能因为异步任务已被弃用而使用它?