Ошибка “on a null object reference” при работе с Room

300
12 декабря 2017, 19:29

Пытаюсь получить доступ к уже существующей bd через Room, но при выполнении кода просходит ошибка

Attempt to invoke virtual method 'java.lang.String com.example.kmatrosov001.game.daotest.User.getFirst_name()' on a null object reference

База данных не пуста, таблица существует и все элементы в ней есть (пробовал на нескольких БД, распологается в папке assets). В целом, пример полностью идентичен примеру гугла https://developer.android.com/topic/libraries/architecture/room.html ,только он, получается, ругается на пустую дб, но в ней есть все необходимые записи. Также пытался запускать из-под метода onCreate.

Settings.java

public class Settings extends AppCompatActivity implements View.OnClickListener {
    Button button;
    AppDatabase db;
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.settings);
        button = findViewById(R.id.sMenu);
        button.setOnClickListener(this);
        db = Room.databaseBuilder(getApplicationContext(),
                AppDatabase.class, "testdb.db").allowMainThreadQueries().build();
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.sMenu:
                Toast.makeText(this, db.userDao().findByName("My", "Name").getFirst_name(), Toast.LENGTH_LONG).show();
                break;
        }
    }
}

User.java

@Entity
public class User {
    @PrimaryKey
    private int uid;
    @ColumnInfo(name = "first_name")
    private String first_name;
    @ColumnInfo(name = "last_name")
    private String lastName;
    public int getUid() {
        return uid;
    }
    public void setUid(int uid) {
        this.uid = uid;
    }
    public String getFirst_name() {
        return first_name;
    }
    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

UserDao.java

@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);
}
READ ALSO
Записанное видео подлагивает (FFMPEG)

Записанное видео подлагивает (FFMPEG)

Исходник взят отсюда

209
Скрытие клавиатуры и перенос каретки в EditText

Скрытие клавиатуры и перенос каретки в EditText

Нужно при нажатии "Enter" скрыть клавиатуруВсё работает, но при закрытии клавиатуры каретка переходит на новую строку

284
как отправить метод Send в брокер RabbitMQ?

как отправить метод Send в брокер RabbitMQ?

Красным полем помечена строчка с factorynewConnection()

261
Перевод строки в двоичный код

Перевод строки в двоичный код

Необходимо преобразовать строку состоящую из символов (Пример String a = "abc") в массив битов (Пример вывода : 01001101 01010100 01101011) Как это лучше реализовать...

423