即使“模块”和“sModule”相等,为什么跳过java代码中的if语句

时间:2013-03-28 14:09:42

标签: java android sqlite sorting if-statement

我尝试只选择具有相同模块的文件 从SQL表中列出视图。如果我正在使用if(module == smodule)应用程序没问题,但if语句被跳转,使用if(module.equals(smodule))应用程序正在崩溃。

感谢@Nambari问题,我对数据库中的模块值有一个null。

感谢@Buhake Sindi提出的建议'将其实例化为String module =“”'

Java代码.................:

private void getFiles() {                               //getting data from the SQL database
    String[] columns = {"id", "file", "module", "date", "note"};
    database = helper.getWritableDatabase();
    Cursor cursor = database.query("files", columns, null, null, null, null, null);
    cursor.moveToFirst();
    files.clear();
    while (!cursor.isAfterLast()) {
        String module = cursor.getString(2);
        String smodule = "Alllllll";
        Log.v("test", smodule+" "+module+" <-if m=sm getting sql data /not if");
        if (module.equals(smodule)){
             String file = cursor.getString(1);
             files.add(file);
             Log.v("test", file+" "+files+" <-if m=sm getting sql data/if");
        }
    cursor.moveToNext();
    }
    cursor.close();
    helper.close();

logcat的:

Alllllll null <-if m=sm getting sql data not/if
Alllllll null <-if m=sm getting sql data not/if
Alllllll null <-if m=sm getting sql data not/if
Alllllll null <-if m=sm getting sql data not/if
Alllllll Alllllll <-if m=sm getting sql data not/if
Alllllll Alllllll <-if m=sm getting sql data not/if
Alllllll Alllllll <-if m=sm getting sql data not/if

使用.equals()替换==后的错误日志:

03-28 14:31:03.985: E/SpannableStringBuilder(25898): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-28 14:31:03.985: E/SpannableStringBuilder(25898): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-28 14:31:15.030: D/AbsListView(25898): Get MotionRecognitionManager
03-28 14:31:15.085: W/ResourceType(25898): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75)
03-28 14:31:15.090: W/ResourceType(25898): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75)
03-28 14:31:15.225: E/SpannableStringBuilder(25898): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-28 14:31:15.225: E/SpannableStringBuilder(25898): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-28 14:31:28.950: D/AbsListView(26523): Get MotionRecognitionManager
03-28 14:31:29.060: D/libEGL(26523): loaded /system/lib/egl/libEGL_mali.so
03-28 14:31:29.075: D/libEGL(26523): loaded /system/lib/egl/libGLESv1_CM_mali.so
03-28 14:31:29.080: D/libEGL(26523): loaded /system/lib/egl/libGLESv2_mali.so
03-28 14:31:29.090: D/(26523): Device driver API match
03-28 14:31:29.090: D/(26523): Device driver API version: 10
03-28 14:31:29.090: D/(26523): User space API version: 10 
03-28 14:31:29.090: D/(26523): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Thu Oct 25 08:43:05 KST 2012 
03-28 14:31:29.115: D/OpenGLRenderer(26523): Enabling debug mode 0
03-28 14:31:29.135: W/ResourceType(26523): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75)
03-28 14:31:29.145: W/ResourceType(26523): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75)
03-28 14:31:30.780: D/AbsListView(26523): Get MotionRecognitionManager
03-28 14:31:30.800: V/test(26523): Alllllll null <-if m=sm getting sql data /not if
03-28 14:31:30.805: D/AndroidRuntime(26523): Shutting down VM
03-28 14:31:30.805: W/dalvikvm(26523): threadid=1: thread exiting with uncaught exception (group=0x4189f2a0)
03-28 14:31:30.810: E/AndroidRuntime(26523): FATAL EXCEPTION: main
03-28 14:31:30.810: E/AndroidRuntime(26523): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.cn/com.example.cn.ListView2}: java.lang.NullPointerException
03-28 14:31:30.810: E/AndroidRuntime(26523):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
03-28 14:31:30.810: E/AndroidRuntime(26523):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
03-28 14:31:30.810: E/AndroidRuntime(26523):    at android.app.ActivityThread.access$700(ActivityThread.java:140)

5 个答案:

答案 0 :(得分:4)

if (module == smodule){

应该是

  if (module.equals(smodule)){

比较字符串/对象时。最好使用equals()而不是==

==检查引用相等性。 equals()检查对象是否相等。

答案 1 :(得分:2)

那是因为你没有评估String,而是在比较它的对象引用。

对于字符串值比较,请使用equals()方法,如下所示:

if (module.equals(smodule)) {

看到smodule永远不为null且该模块可以为null,以避免NullPointerException而是:

if (smodule.equals(module)) {

答案 2 :(得分:1)

使用module.equals(smodule),

== vs .equals

  • == - &gt;是一个参考比较,即两个对象都指向相同的内存位置

  • equals() - &gt;评估对象中值的比较

  • 它是.equals(...)虽然(第一个字母没有大写)。

  • equals只会比较它所写的比较,不多,不 以下。

  • 如果未覆盖equals,则默认为==;也就是说,它返回 如果两个变量都引用同一个对象,则为true。

  • 如果你重写equals,请务必记住覆盖hashCode “打破合同”。

答案 3 :(得分:0)

请使用.equals方法而不是Java中的==。 已经有discussion吨了。

答案 4 :(得分:0)

if (module == smodule)

应该是

if (module.equals(smodule))

==比较对象引用。

equals()比较对象内容。