比较中的null值似乎不为null

时间:2014-05-21 12:08:54

标签: java android if-statement null

通常我会在每个活动(Android)中进行比较,但我遇到了问题而无法找到解决方案。我尽我所能,但结果仍然是一样的。

if if语句null值似乎不为null。

我做错了什么?

以下是代码:

System.out.println(item.getSub()); // output is null
if (item.getSub()!=null) {
    r.putExtra("engsub", item.getSub()); // Normally it shouldn't, but it goes in here
    startActivityForResult(r, position); 
}
else {
    //Do something
}

我试过这个:

String def = item.getSub()+"";
System.out.println(def); // output is not null
    if (!def.equals("")) {
    r.putExtra("engsub", item.getSub()); // Normally it shouldn't, but it goes in here
startActivityForResult(r, position); 
}
else {
    //Do something
}

已添加:

JSONArray jsonResponse = new JSONArray(result);
            asd = new String[5][jsonResponse.length()];
            rowItems = new ArrayList<RowItem2>();
            for (int i = 0; i < jsonResponse.length(); i++) {
                JSONObject js = jsonResponse.getJSONObject(i);
                                    // ....codes
                asd[4][i] = js.getString("engsub");;

                item = new RowItem2(asd[0][i], asd[1][i], asd[2[i],
                        asd[3][i],asd[4][i]);
                rowItems.add(item);
            }

RowItem2类

  private String engsub;
  public RowItem2(String title, String desc,String desc2,String desc3,String engsub) {
    this.engsub = engsub;
   //......
}
  //.......
public String getSub() {
    return engsub;
}
public void setSub(String engsub) {
    this.engsub = engsub;
}

3 个答案:

答案 0 :(得分:2)

我认为JSON字符串result包含单词&#34; NULL&#34;在它。

查看有关JSONObject on Android Developer site的文档。

以下是解决问题的方法:

  

当请求的类型是String时,其他非空值将是   使用valueOf(Object)强制执行。虽然无法强制null,但是   sentinel值NULL被强制转换为字符串&#34; null&#34;。


在尝试追踪这样的问题时,有些想法如下:


确认您的假设

你听起来很困惑,所以请放心吧。 Java / Android没有任何问题。通过每次都能正常工作的更改进行确认。

此更改会对您的假设提出质疑:您认为item.getSub()正在返回null

String nullString = null;
System.out.println(nullString);
if (nullString != null) {
    r.putExtra("engsub", item.getSub()); // Normally it shouldn't, but it goes in here
    startActivityForResult(r, position); 
}
else {
    //Do something
}

除非您的IDE出现问题,否则不会通过if测试。


确认您的IDE正在运行

您可能仍然认为自己正在获得null。在某些情况下,它可能看起来像这样。

有时Eclipse不会将正确的代码放到您的模拟器/设备上。构建可能存在问题。

所以做一个项目清洁。然后重新构建并测试。

这将确认您运行的是正确的代码。


确认您所看到的内容

有时输出看起来像&#34;&#34;字符串,它可以是&#34; &#34;或&#34; &#34;

尝试记录[和]包围的输出。

System.out.println("[" + item.getSub() + "]");

深入研究代码

这就是为什么我要求查看item.getSub()代码,以及您展示的额外代码。

如果上述测试没有帮助,请查看如何设置/返回该值。

展望JSONObject.getString() javadoc,表明它无法返回null值:

在您的情况下,注销JSON字符串,并在RowItem2构造函数中注销值。

这应该显示&#34; NULL&#34;我在这个答案的顶部提到。

答案 1 :(得分:1)

试试这个,

if(!"".equals(your string) 
{
    // do something
}

答案 2 :(得分:1)

你可以尝试:

if (item.getSub() instanceof String) {
    r.putExtra("engsub", item.getSub()); // Normally it shouldn't, but it goes in here
    startActivityForResult(r, position); 
}
else {
    //Do something
}

这样您就可以确定item.getSub()是一个字符串。