【问题标题】:Function returning blank string [closed]返回空白字符串的函数[关闭]
【发布时间】:2019-05-10 08:54:19
【问题描述】:

这个函数一直返回一个空字符串。

 public String getRandomWord() {
        int id = (int)(Math.random())*(numberOfRows())+1;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res =  db.rawQuery( "select word from words where id="+id+"", null );
        String s = "";
        if (res.moveToFirst())
            s = res.getString(res.getColumnIndex("word"));
        res.close();
        return s;
    }

【问题讨论】:

  • 如果确实如此,那么res.moveToFirst()false,这意味着结果为空。这是您可以/应该/必须/必须使用日志记录或调试器检查的内容。
  • 要么res.moveToFirst() 为假,要么res.getString 返回一个空白字符串。
  • 检查你声明id的大括号!不管numberOfRows() 返回什么 id 永远是1!你想要的可能是int id = (int)(Math.random()*numberOfRows())+1;

标签: java android sqlite


【解决方案1】:

返回空字符串的原因是res.moveToFirst()false(所以你的SQL 查询结果是空的)并且if 块永远不会运行,因此s 将始终保持其初始状态"" 的值。

另一个原因可能是表达式是true,但res.getString(res.getColumnIndex("word")) 返回一个空白字符串。

【讨论】:

    【解决方案2】:

    如果你想要一个随机的行(单词)然后尝试使用:-

    public String getRandomWord() {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res =  db.rawQuery( "select word from words order by random() limit 1", null );
        String s = "";
        if (res.moveToFirst())
            s = res.getString(res.getColumnIndex("word"));
        res.close();
        return s;
     }
    

    这确实假设表中有行,如果没有,那么您仍然会得到空白结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 2013-03-18
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多