我有一个像
这样的参数public class CounterTableDO extends ViewModel{
private LiveData<Double> _score;
@DynamoDBTypeConverted(converter = TypeConverter.class)
@DynamoDBAttribute(attributeName = "score")
public LiveData<Double> getScore() {
return _score;
}
}
我想检测AWS DynamoDB存储中的任何更改,以便在此处反映出来。 我经历过 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.ArbitraryDataMapping.html
在TypeConverter类下,我已经覆盖了2个方法 第一种方法将对象转换为String。 第二种方法应该是相反的。
public class TypeConverter implements DynamoDBTypeConverter<String,CounterTableDO> {
@Override
public String convert(CounterTableDO object) {
CounterTableDO doubleLiveData=(CounterTableDO)object;
String liveDataString=null;
try
{
if(doubleLiveData!=null)
{
liveDataString=String.format("%s", doubleLiveData.getScore());
}
}
catch (Exception e)
{
e.toString();
}
return liveDataString;
}
@Override
public CounterTableDO unconvert(String s) {
CounterTableDO counterTableDO=new CounterTableDO();
return counterTableDO;
try{
if((s!=null)&&(s.length()!=0)){
String[] data=s.split("x");
Double d =Double.parseDouble(data[0].trim());
counterTableDO.setScore(d);
}
}
catch (Exception e)
{
e.toString();
}
}
}
但是在非转换方法中,我无法使用该指令设置counterTableDO对象的分数 counterTableDO.setScore(d);
这会引发错误说明 “setScore(CounterTableDO中的android.arch.lifecycle.livedata无法应用于java.lang.Double)”
任何想法我们如何将Android LiveData映射到AWS预定义类型?
答案 0 :(得分:0)
DynamoDB支持以下原始数据类型和原语 包装类。
字符串
布尔值,布尔值
字节,字节
日期(作为ISO_8601毫秒精度字符串,转换为UTC)
日历(作为ISO_8601毫秒精度字符串,转换为UTC)
很长很长
Integer,int
加倍,双重
漂浮,漂浮
的BigDecimal
的BigInteger
android.arch.lifecycle.LiveData不是这些类型中的一种,因此您不能指望DynamoDBMapper知道如何处理它。
您需要编写自定义类型转换器。看看这个 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.ArbitraryDataMapping.html