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

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

Я уже знаю, что @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() ;
            }
        }

person Danial    schedule 14.04.2019    source источник


Ответы (1)


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

 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;
}
person Danial    schedule 15.04.2019