我的MainActivity代码是
private void updateConnectionState()
{
Device localDevice = this.Controller.getConnectedDevice();
if (localDevice == null)
updateModelSpinner(localDevice.getType()); //warning at this line
str2 = localDevice.getHostName();
if (!TextUtils.isEmpty(str2))
}
private void updateSpinner(Device.Type paramType)
{
boolean bool = Device.Type.UNKNOWN.equals(paramType);
int i = 0;
if (!bool)
i = 1 + paramTvType.ordinal();
this.ModelSpinner.setSelection(i);
}
private void ModelSpinner(Device.Type paramType)
{
boolean bool = Device.Type.UNKNOWN.equals(paramType);
int i = 0;
if (!bool)
i = 1 + paramType.ordinal();
this.ModelSpinner.setSelection(i);
}
我的枚举类是
public class Device {
private Type type = Type.A_LOGIC;
public static Type getTypeForId(int paramInt)
{
switch (paramInt)
{
default:
return Type.A_LOGIC;
case 0:
return TvType.B_LOGIC;
case 1:
return TvType.A_LOGIC;
case 2:
return TvType.D_LOGIC;
case 3:
return TvType.E_LOGIC;
case 4:
}
return TvType.F_LOGIC;
}
public void setType(Type paramType)
{
this.Type = paramType;
}
public enum Type
{
A_LOGIC("A_LOGIC"),
B_LOGIC ("B_LOGIC" ),
C_LOGIC ("C_LOGIC"),
D_LOGIC("D_LOGIC"),
E_LOGIC ("E_LOGIC"),
UNKNOWN("UNKNOWN");
private String object;
TvType(String localobj)
{
this.object; = localobj;
}
public String getLetter()
{
return this.object;;
}
}
public Type getType()
{
return this.type;
}
并且在方法内部的主要活动中调用类型为
updateSpinner(localDevice.getType());
但是这里显示警告
Null pointer access: The variable localTVDevice can only be null at this location
并在该行抛出一个零点错误。 我是枚举概念的新手,请告诉我为什么它会抛出这个错误。我提到堆栈溢出但找不到答案。
答案 0 :(得分:2)
从你的代码:
Device localDevice = this.Controller.getConnectedDevice();
if (localDevice == null)
updateModelSpinner(localDevice.getType());
因为if没有{}
,所以此代码类似于:
Device localDevice = this.Controller.getConnectedDevice();
if (localDevice == null) {
updateModelSpinner(localDevice.getType());
}
因此警告
<强> FIX:强>
Device localDevice = this.Controller.getConnectedDevice();
if (localDevice != null) {
updateModelSpinner(localDevice.getType());
// more code using localDevice
}
答案 1 :(得分:1)
问题在于此代码
if (localDevice == null)
updateModelSpinner(localDevice.getType());
如果localDevice为null, 然后调用updateModelSpinner(null.getType())
你可能想要这段代码:
if (localDevice != null)
updateModelSpinner(localDevice.getType());
当localDevice为null时,您必须决定应该发生什么。
答案 2 :(得分:0)
此编译器警告表示变量(在本例中为 localTVDevice )未赋值,并且通过此变量调用方法无疑会在运行时产生 NullPointerException 。
还有一件事我在你的代码中看到了什么?您可以直接将枚举值与'=='进行比较,而不是像在此行中那样使用等号:
boolean bool = Device.Type.UNKNOWN.equals(paramType);
boolean bool = paramType == Device.Type.UNKNOWN;