Получение автоматически сгенерированного идентификатора при вставке в roomDatabase

1

Каков наилучший способ получить идентификатор недавно вставленной строки в базе данных комнаты?

Я уже знаю, что @insert может вернуться долго.

Возможно ли достичь этого с помощью AsyncTask?

DatabaseInitializer.java

    public  class DatabaseInitializer {

    private static roomDatabase rDb;

            public  DatabaseInitializer(Context context) {
              rDb=  roomDatabase.createDatabase(context);

            }
            public  void insertPlayer(String pname,String ppic) {
                Players player = new Players();
                player.setPname(pname);
                player.setPpic(ppic);
                 insertPlayer(player);

            }
            private static void insertPlayer(final Players player) {
                new AsyncTask<Void, Void, Void>() {
                    @Override
                    protected Void doInBackground(Void... voids) {
                         rDb.playerDao().insert(player);
                         return null;
                    }

                }.execute() ;
            }
        }
Теги:
android-room

1 ответ

0
Лучший ответ

Наконец, я сделал это так:

 public  Long insertPlayer(String pname,String ppic) {
    Players player = new Players();
    player.setPname(pname);
    player.setPpic(ppic);
     return insertPlayer(player);
}
static Long playerId;
private static Long insertPlayer(final Players player) {
    try {
        new AsyncTask<Void, Void, Long>() {
            @Override
            protected Long doInBackground(Void... voids) {
                playerId = rDb.playerDao().insert(player);
                return playerId;
            }

            @Override
            protected void onPostExecute(Long pID) {
                super.onPostExecute(playerId);
            }

        }.execute().get();
    }catch (Exception ex){ex.printStackTrace();}
        return playerId;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню