gpt4 book ai didi

java - 如何在 android 中使用数据绑定(bind)库绑定(bind)一个可以是 String 或 double 的变量?

转载 作者:行者123 更新时间:2023-11-29 19:20:49 24 4
gpt4 key购买 nike

对于我的 android 应用程序,我想读取我的树莓派的温度。从服务器,变量以 double 返回。从 XML 中,它作为字符串返回。因此我想,如果它是字符串或 double 值,我为什么不制作一个可以设置值的通用 setter 。

@Bindable
public String getCPUTemperature(){
return Double.toString(mCPUTemp);
}

/**
* Sets the CPU temperature for the device view model.
* @param <T> The generic parameter T accepts a String as wel as a Double to set the available memory.
*/
public <T> void setCPUTemperature(T CPUTemp){
if(CPUTemp.getClass().equals(String.class))
this.mCPUTemp = Double.parseDouble((String)CPUTemp);
else if(CPUTemp.getClass().equals(Double.class))
this.mCPUTemp = (double)CPUTemp;
notifyPropertyChanged(BR.cPUTemperature);
}

但是在我创建这个 setter 之后我发现:

Note: Arrays and a generic type, such as the Observable class, might display errors when there are no errors.

所以我开始怀疑。是否可以使用通用变量来解决它?如果可以,这是解决它的最佳方法吗?

最佳答案

听起来评论与 Android Studio 对数据绑定(bind)的支持有关。 Android Studio 对数据绑定(bind)的支持仍在改进中。当代码正常编译和运行时,它有时会显示警告或红色下划线。

您正在做的事情将会奏效。您当前的方法根本不使用 T,因此它也可能是 Object。我认为您不会从使用泛型中获得任何真正的优势。

你可以不用泛型来做,我认为它看起来更好:

public void setCPUTemperature(String CPUTemp){
this.mCPUTemp = Double.parseDouble((String)CPUTemp);
notifyPropertyChanged(BR.cPUTemperature);
}

public void setCPUTemperature(double CPUTemp){
this.mCPUTemp = CPUTemp;
notifyPropertyChanged(BR.cPUTemperature);
}

还有其他选择。例如,您可以在 XML 中仅使用 double 和快速 String 转换:

public double getCPUTemperature(){
return this.mCPUTemp;
}

public void setCPUTemperature(double CPUTemp){
this.mCPUTemp = CPUTemp;
notifyPropertyChanged(BR.cPUTemperature);
}

然后在 XML 中:

<TextView android:text='@{"" + model.cPUTemperature}' .../>
<TextView android:text="@{Double.toString(model.cPUTemperature)}" .../>
<TextView android:text="@{@string/tempFormat(model.cPUTemperature)}" .../>

如果是我的应用程序,我会选择 @string/tempFormat 选项,这样我就可以轻松地更改 double 的格式。我更喜欢在代码中避免硬编码格式化,XML 是一个更好的地方。

关于java - 如何在 android 中使用数据绑定(bind)库绑定(bind)一个可以是 String 或 double 的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42528697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com