Как определить то же преобразование и выбрать правильное с помощью TypeConverter в комнате - PullRequest
0 голосов
/ 21 мая 2019

В моем дао у меня есть этот метод:

@Query("SELECT category, group_concat(type) as types"  +
           "FROM Type" +
           "GROUP BY category")
public abstract LiveData<List<CategoryWithTypes>> getCategoriesWithTypes();

А это класс CategoryWithTypes:

@Data
public class CategoryWithTypes {
    private String category;
    private ArrayList<String> types;
}

Чтобы преобразовать строку, полученную из group_concat(type) (с разделителем ','), я хочу использовать @TypeConverter:

@TypeConverter
public static ArrayList<String> arrayfromString2(String value) {
    return new ArrayList<String>(Arrays.asList(value.split(",")));
}

Проблема в том, что у меня уже есть @TypeConverter, который я использую в другом методе в дао:

 @TypeConverter
 public static ArrayList<String> arrayfromString(String value) {
     return new ArrayList<String>(Arrays.asList(value.split("/")));
 }

И, очевидно, я получаю эту ошибку во время компиляции:

error: Multiple methods define the same conversion.

Нет способа обойти ошибку и использовать оба @TypeConverter, указав, какой использовать в зависимости от ситуации?

1 Ответ

1 голос
/ 21 мая 2019

Быстрый ответ : Я думаю, что это невозможно.

Решение, которое может работать на вас : Учитывая, что вы создаете строку с group_concat,Лучшим подходом будет изменить предложение SQL на это, чтобы установить group_concat разделитель (вместо значения по умолчанию ","):

@Query("SELECT category, group_concat(type, '/') as types"  +
           "FROM Type" +
           "GROUP BY category")
public abstract LiveData<List<CategoryWithTypes>> getCategoriesWithTypes();

, а затем использовать только это TypeConverter:

@TypeConverter
public static ArrayList<String> arrayfromString(String value) {
    return new ArrayList<String>(Arrays.asList(value.split("/")));
}

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

Например:

@TypeConverter
public static ArrayList<String> arrayfromString(String value) {
    if (value.length() == 0) {
        return new ArrayList<String>();
    }
    String delimiter = value.substring(0, 1);
    return new ArrayList<String>(Arrays.asList(value.substring(1).split(delimiter)));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...