Невозможно получить данные одной строки в базе данных комнаты, выбрав ее - PullRequest
0 голосов
/ 29 ноября 2018

Основная активность

myRoomDatabase3 = Room.databaseBuilder(getApplicationContext(),MyRoomDatabase.class,"messagedb3").fallbackToDestructiveMigration().allowMainThreadQueries().build();

Message message4 = new Message();
            message4.setTime("14:10");
            message4.setContactName("Deepika");
            message4.setDate("02-12-2018");
            message4.setMsg("HI");

            MainActivity.myRoomDatabase3.myDao().addMessage(message4);

            Toast.makeText(MainActivity.this,"Message added",Toast.LENGTH_SHORT).show();

Код интерфейса MyDao: -

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;

@Dao
public interface MyDao {

@Insert
public void addMessage(Message message);

@Query("SELECT * FROM messages3 WHERE message_date LIKE :givenDate AND "  + "message_time LIKE :givenTime LIMIT 1")
public Message getMessageInfo(String givenDate,String givenTime);

}

Класс моего сообщения: -

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;

@Entity(tableName = "messages3")
public class Message {

@PrimaryKey(autoGenerate = true)
private int id;

@ColumnInfo(name = "message_date")
private String date;

@ColumnInfo(name = "message_time")
private String time;

@ColumnInfo(name = "message_contactName")
private String contactName;

@ColumnInfo(name = "message_msg")
private String msg;

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}

public String getContactName() {
    return contactName;
}

public void setContactName(String contactName) {
    this.contactName = contactName;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg= msg;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

}

Попытка получить данные из одной строки базы данных, дата и время которой указаны следующим образом: -

Calendar calender = Calendar.getInstance();
    calender.set(Calendar.YEAR,2018);
    calender.set(Calendar.MONTH, 11);
    calender.set(Calendar.DAY_OF_MONTH, 02);
    SimpleDateFormat simpledateformat = new SimpleDateFormat("dd-MM-yyyy");
    String Date = simpledateformat.format(calender.getTime());

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 14);
    cal.set(Calendar.MINUTE, 10);
    cal.set(Calendar.SECOND,00);
    SimpleDateFormat simpletimeformat = new SimpleDateFormat("hh:mm");
    String Time = simpletimeformat.format(cal.getTime());

    Message message = MainActivity.myRoomDatabase3.myDao().getMessageInfo(Date,Time);

    String contactName = (message==null) ? "No data found" : message.getContactName();
    String text = (message == null) ? "No data found" : message.getMsg();

My Room Класс базы данных: -

import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;


@Database(entities = {Message.class},version = 12,exportSchema = false)
public abstract class MyRoomDatabase extends RoomDatabase {

public abstract MyDao myDao();

}

Myфайл build.gradle: -

allprojects {
repositories {
    google()
    jcenter()
}

}

Зависимости-

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
}

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

Я добавил весь код, который я использую. Пожалуйста, скажите мне, что-то не так. Я застрял на этом в течение 2-3 дней. Что-то должно быть не так.Что это?Почему запрос возвращает ноль?

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Если вы хотите, чтобы результат представлял собой только одну запись сообщения, используйте следующий запрос:

SELECT * FROM messages WHERE message_date= :givenDate AND message_time= :givenTime LIMIT 1

Теперь он свяжет результат запроса с предоставленным объектом сообщения.

0 голосов
/ 02 декабря 2018

Я нашел это, это совершенно глупая ошибка.Когда я вношу информацию в базу данных, я ввожу время как 14:10, но когда я пытаюсь получить к нему доступ, я использую формат времени «чч: мм» вместо «ЧЧ: мм», поэтому я пытаюсьнайдите столбец, имеющий время 02:10 вместо 14:10.Это два разных значения и, следовательно, возвращается ноль.

0 голосов
/ 29 ноября 2018

Ваш запрос ничего не возвращает.Так что сообщение пустое.Вам нужно убедиться, что ваш запрос что-то возвращает или, что еще лучше, добавить код для обработки ситуации, когда ничего не найдено, поскольку это кажется приемлемым возможным состоянием.

Отладчик может дать тот же ответ намного быстрее, чем SO.

Это исключит исключение NullPointerException:

String text = (message == null) ? “No data found.” : message.getMsg();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...