如何在会议室数据库中实现此代码?

时间:2019-07-25 16:19:22

标签: java android

我做了一份工作,问题很简单。 一切都很好。 除了我在Mainacticity类中执行代码时。 打印结果出错。 它在日志猫中显示我的位置异常 如何执行代码并正确显示结果? 请输入正确的代码-因为我仍在尝试。

// Logcat:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.roomdatabase/com.example.roomdatabase.MainActivity}: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2695)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769)
        at android.app.ActivityThread.access$900(ActivityThread.java:177)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5910)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
     Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
        at androidx.room.RoomDatabase.assertNotMainThread(RoomDatabase.java:266)
        at androidx.room.RoomDatabase.query(RoomDatabase.java:308)
        at androidx.room.util.DBUtil.query(DBUtil.java:59)
        at com.example.roomdatabase.UserDao_Impl.getAll(UserDao_Impl.java:92)
        at com.example.roomdatabase.MainActivity.onCreate(MainActivity.java:22)
        at android.app.Activity.performCreate(Activity.java:6178)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2648)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769) 
        at android.app.ActivityThread.access$900(ActivityThread.java:177) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5910) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 



//

    public class MainActivity extends AppCompatActivity{

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

            AppDatabase db = Room.databaseBuilder(getApplicationContext() , AppDatabase.class,"database-name").build();

            Log.i("Trace","" + db.userDao().getAll().get(0).uid);
            //Log.v("Trace","" + db.userDao().getAll());

        }
    }


    // 
    @Database(entities = {User.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase{

        public abstract UserDao userDao();

    }


    // 

    @Entity
    public class User{

        @PrimaryKey
        public int uid;
        @ColumnInfo(name = "first_name")
        public String firstName;
        @ColumnInfo(name = "last_name")
        public String lastName;

    }

    // 

    @Dao
    public interface UserDao {
        @Query("SELECT * FROM user")
        List<User> getAll();
        @Query("SELECT * FROM user WHERE uid IN (:userIds)")
        List<User> loadAllByIds(int[] userIds);
        @Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1")
        User findByName(String first, String last);
        @Insert
        void insertAll(User... users);
        @Delete
        void delete(User user);
    }

0 个答案:

没有答案