猿问

让 Bowler Count 显示在 League RecyclerView 中

我有一个联赛列表,我想在每个条目中显示投球手的数量。例如:

我想在列表中每个联赛名称下显示每个列表中投球手的数量。例如:

http://img.mukewang.com/6448eb760001d3f604790071.jpg

这是为了快速了解每个联赛。


我试图用下面的代码来完成这个:


数据库助手


//Getting Number of Bowlers in League

    public String leagueBowlerCount(String leagueId)

    {

        

        SQLiteDatabase db = this.getReadableDatabase();

    String countQuery = "SELECT * FROM " + Bowler.TABLE_NAME + " WHERE " + Bowler.COLUMN_LEAGUE_ID + " = '" + leagueId + "'";

    Cursor cursor = db.rawQuery(countQuery, null);


    int count = 0;

    if(null != cursor)

        if(cursor.getCount() > 0){

            cursor.moveToFirst();

            count = cursor.getInt(0);

        }

    cursor.close();



db.close();

return String.valueOf(count);

}

几天来我一直在搞这个,我不明白为什么这行不通。任何帮助将不胜感激。我在想,可能有一种我不知道的更简单的方法来完成这个。

在 logcat 中,我看到以下消息:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String ca.vogl.r.tenpinbowlingcompanion.database.DatabaseHelper.leagueBowlerCount(java.lang.String)' on a null object reference.

正如下面所指出的,错误似乎发生在上面列出的 leagueBowlerCount() 中。

在对 onBindViewHolder 添加以下内容之后:db = new DatabaseHelper (mainActivity)。我看到了我应该看到的值,但它们不正确。见下图。


FFIVE
浏览 100回答 1
1回答

沧海一幻觉

我相信您的问题是您返回的是第一个选定的投球手的 ID 而不是行数。也就是你,检查行数大于0后,移动到第一行,然后使用count = cursor.getInt(0);这将是已提取的第一行的第一列中存储的值。尝试使用:-public String leagueBowlerCount(String leagueId){    String rv = "0";    SQLiteDatabase db = this.getReadableDatabase();    Cursor cursor = db.query(Bowler.TABLE_NAME,new String[]{"count(*)"},Bowler.COLUMN_LEAGUE_ID + "=?",new String[]{leagueId},null,null,null);    if (cursor.moveToFirst()) {        rv = String.valueOf(cursor.getLong(0));    }    cursor.close();    db.close();    return rv;}这使用聚合函数计数来提取相应联赛的行数。请注意,以上代码是原理代码,尚未经过测试或运行,因此可能存在一些错误。或者你可以使用: -public String leagueBowlerCount(String leagueId)    {    SQLiteDatabase db = this.getReadableDatabase();    String countQuery = "SELECT * FROM " + Bowler.TABLE_NAME + " WHERE " + Bowler.COLUMN_LEAGUE_ID + " = '" + leagueId + "'";    Cursor cursor = db.rawQuery(countQuery, null);    int count = cursor.getCount();    cursor.close();    db.close();    return String.valueOf(count);}关于您的代码:-int count = 0;if(null != cursor)    if(cursor.getCount() > 0){        cursor.moveToFirst();        count = cursor.getInt(0);    }cursor.close();检查 null Cursor 是没有用的,因为从 SQLiteDatabase 方法(例如 rawQuery)返回的 Cursor 永远不会为 null。相反,将返回一个有效的、可能为空的 Cursor。此外,使用该方法检查 Cursor 是否有行getCount,然后moveToFirst不需要使用,因为仅使用if (cursor.moveToFirst) {.....}就足够了,因为如果没有行,该moveToFirst方法将返回 false,因为无法执行移动。
随时随地看视频慕课网APP

相关分类

Java
我要回答