Найти, если строка [] содержит строку в базе данных комнаты Android - PullRequest
0 голосов
/ 10 марта 2020

Я хочу найти в моей таблице массив String, который должен содержать строку.

Это моя Модель

@ColumnInfo(name = DbConstants.ColumnNames.ConversationData.AGENTS_ID)
@SerializedName("agentsId")
public String[] agents;

И это мой TypeConverter

 @TypeConverter
    public String fromStringsToJson(String[] strings) {
        if (strings == null)
            return null;
        return new Gson().toJson(strings);
    }

@TypeConverter
public String[] fromJsonToStrings(String string) {
    if (string == null)
        return null;

    Gson gson = new Gson();
    Type type = new TypeToken<String[]>() {
    }.getType();
    return gson.fromJson(string, type);
}

@TypeConverter
public String fromStringMapToJson(Map<String, String> map) {
    if (map == null)
        return null;

    Gson gson = new Gson();
    Type type = new TypeToken<Map<String, String>>() {
    }.getType();
    return gson.toJson(map, type);
}

@TypeConverter
public Map<String, String> fromJsonToMap(String json) {
    if (json == null)
        return null;

    Gson gson = new Gson();
    Type type = new TypeToken<Map<String, String>>() {
    }.getType();
    return gson.fromJson(json, type);
}

А это DAO Query

@Query("select * from conversations where channelId = :channelId AND " +
        " agentsId LIKE :agentId ORDER BY updateTimeStamp DESC")
List<ConversationData> getMyConversations(String channelId, String agentId);

Все настроено идеально. Я предполагаю, что проблема в одном из Converter или Query

Но он не может найти agentId в строковом массиве.

1 Ответ

0 голосов
/ 12 марта 2020

Для тех, кто ищет ответ.

Проблема была с моим запросом. Я только что обновил это.

@Query("select * from conversations where channelId = :channelId AND status = :status AND" +
            " agentsId LIKE '%' || :agentId || '%' ")

Надеюсь, это поможет.

...