关于在Android Studio中自定义listview感到困惑

时间:2018-09-03 03:16:26

标签: java android android-sqlite

我的数据库为空是什么问题? 出现Cursor cursor = myDb.getData(select * from Donation_Details); myDb : null,并弹出下面的错误。

myDb:Null

这是运行时错误提示

Runtime Error

这里是DatabaseHelper,当我分配和清除数据库时。

 private static final String DATABASE_NAME = "eBossCharity.db";
    private static  final int DATABASE_VERSION = 1;

    public dbOpenHelper(Context context){
        super(context,DATABASE_NAME,null,DATABASE_VERSION);
    }

当我想从数据库中获取数据时,这里是dbAccess

public dbOpenHelper openHelper;
    public SQLiteDatabase db;
    private static dbAccess instance;

    public dbAccess(Context context) {
        this.openHelper = new dbOpenHelper(context);
    }

    public static dbAccess getInstance(Context context) {
        if (instance == null) {
            instance = new dbAccess(context);
        }
        return instance;
    }

    public Cursor getData(String sql) {
        db = openHelper.getReadableDatabase();
        return db.rawQuery("", null);
    }

当我要将数据显示到自定义列表视图中时,这里是Summary page。我在第13行放置了一个断点并对其进行调试。它说我的数据库为空。我调用了dbAccess方法getData并获取了数据库“ Donation_details”。它应该显示数据...

ListView listView;
    ArrayList<Model> mList;
    RecordListAdapter mAdapter = null;
    dbAccess myDb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_summary__page);

        this.listView = findViewById(R.id.listView);
        mList = new ArrayList<>();
        mAdapter = new RecordListAdapter(this,R.layout.row,mList);
        listView.setAdapter(mAdapter);
        Cursor cursor = myDb.getData("Select * from Donation_Details");
        mList.clear();
        while(cursor.moveToNext()){
            int id = cursor.getInt(0);
            String txnno = cursor.getString(1);
            String name = cursor.getString(2);
            String txndate = cursor.getString(3);
            BigDecimal amount = BigDecimal.valueOf(cursor.getDouble(4));
            String description1 = cursor.getString(5);
            String createddate = cursor.getString(7);

            mList.add(new Model(id,txnno,name,txndate,amount,description1,createddate));
        }

我想我在这里和那里都错过了一些东西。但是我找不到它,或者我键入了错误导致数据库为空?我可以指导一下吗?预先感谢...

2 个答案:

答案 0 :(得分:1)

您需要初始化'dbAccess myDb'

答案 1 :(得分:0)

解决方案:

写这个

grammar Rulebook;       

@header {
package com.someone.commons.rulebook.parser;
}

rulebookStatement
    :   KWRulebook
        (GeneralIdentifier | Identifier)
        '{'
        KWVersion
        VersionConstant
        metaStatement
        (ruleStatement)+
        '}'
    ;

metaStatement
    :   KWMeta
        '{'
        KWDescription
        StringLiteral
        KWSource
        StringLiteral
        KWUser
        StringLiteral
        '}'
    ;

ruleStatement
    :   KWRule
        (GeneralIdentifier | Identifier)
        '{'
        KWDescription
        StringLiteral
        whenThenStatement
        '}'
    ;

whenThenStatement
    :   KWWhen '(' expression ')'
        KWThen '{' (statement)* '}'
    ;

primaryExpression
    :   GeneralIdentifier
    |   Identifier
    |   StringLiteral+
    |   Constant
    |   '(' expression ')'
    |   '[' expression ']'
    ;

postfixExpression
    :   primaryExpression
    |   postfixExpression '[' expression ']'
    |   postfixExpression '(' argumentExpressionList? ')'
    |   postfixExpression '.' Identifier
    |   postfixExpression '->' Identifier
    |   postfixExpression '++'
    |   postfixExpression '--'
    ;

argumentExpressionList
    :   assignmentExpression
    |   argumentExpressionList ',' assignmentExpression
    ;

unaryExpression
    :   postfixExpression
    |   '++' unaryExpression
    |   '--' unaryExpression
    |   unaryOperator castExpression
    ;

unaryOperator
    :   '&' | '*' | '+' | '-' | '~' | '!'
    ;

castExpression
    :   unaryExpression
    ;

multiplicativeExpression
    :   castExpression
    |   multiplicativeExpression '*' castExpression
    |   multiplicativeExpression '/' castExpression
    |   multiplicativeExpression '%' castExpression
    ;

additiveExpression
    :   multiplicativeExpression
    |   additiveExpression '+' multiplicativeExpression
    |   additiveExpression '-' multiplicativeExpression
    ;

shiftExpression
    :   additiveExpression
    |   shiftExpression '<<' additiveExpression
    |   shiftExpression '>>' additiveExpression
    ;

relationalExpression
    :   shiftExpression
    |   relationalExpression '<' shiftExpression
    |   relationalExpression '>' shiftExpression
    |   relationalExpression '<=' shiftExpression
    |   relationalExpression '>=' shiftExpression
    ;

equalityExpression
    :   relationalExpression
    |   equalityExpression '==' relationalExpression
    |   equalityExpression '!=' relationalExpression
    ;

andExpression
    :   equalityExpression
    |   andExpression '&' equalityExpression
    ;

exclusiveOrExpression
    :   andExpression
    |   exclusiveOrExpression '^' andExpression
    ;

inclusiveOrExpression
    :   exclusiveOrExpression
    |   inclusiveOrExpression '|' exclusiveOrExpression
    ;

logicalAndExpression
    :   inclusiveOrExpression
    |   logicalAndExpression '&&' inclusiveOrExpression
    ;

logicalOrExpression
    :   logicalAndExpression
    |   logicalOrExpression '||' logicalAndExpression
    ;

conditionalExpression
    :   logicalOrExpression ('?' expression? ':' conditionalExpression)?
    ;

assignmentExpression
    :   conditionalExpression
    |   unaryExpression assignmentOperator assignmentExpression
    ;

assignmentOperator
    :   '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|='
    ;

expression
    :   assignmentExpression
    |   expression ',' assignmentExpression
    ;

statement
    :   expressionStatement
    ;

expressionStatement
    :   expression+ ';'
    ;


KWRulebook: 'rulebook';
KWVersion: 'version';
KWMeta: 'meta';
KWDescription: 'description';
KWSource: 'source';
KWUser: 'user';
KWRule: 'rule';
KWWhen: 'when';
KWThen: 'then';

Identifier
    :   IdentifierNondigit
        (   IdentifierNondigit
        |   Digit
        )*
    ;

GeneralIdentifier
    :   Identifier
        (   '-' 
        |   '.'
        |   IdentifierNondigit
        |   Digit
        )*
    ;

fragment
IdentifierNondigit
    :   Nondigit
    //|   // other implementation-defined characters...
    ;

VersionConstant
    :   DigitSequence ('.' DigitSequence)*
    ;

Constant
    :   IntegerConstant
    |   FloatingConstant
    ;

fragment
IntegerConstant
    :   DecimalConstant
    ;

fragment
DecimalConstant
    :   NonzeroDigit Digit*
    ;

fragment
FloatingConstant
    :   DecimalFloatingConstant
    ;

fragment
DecimalFloatingConstant
    :   FractionalConstant
    ;

fragment
FractionalConstant
    :   DigitSequence? '.' DigitSequence
    |   DigitSequence '.'
    ;

fragment
DigitSequence
    :   Digit+
    ;

fragment
Nondigit
    :   [a-zA-Z_]
    ;

fragment
Digit
    :   [0-9]
    ;

fragment
NonzeroDigit
    :   [1-9]
    ;

StringLiteral
    :   '"' SCharSequence? '"'
    |   '\'' SCharSequence? '\''
    ;

fragment
SCharSequence
    :   SChar+
    ;

fragment
SChar
    :   ~["\\\r\n]
    |   '\\\n'   // Added line
    |   '\\\r\n' // Added line
    ;

Whitespace
    :   [ \t]+
        -> skip
    ;

Newline
    :   (   '\r' '\n'?
        |   '\n'
        )
        -> skip
    ;

BlockComment
    :   '/*' .*? '*/'
        -> skip
    ;

LineComment
    :   '//' ~[\r\n]*
        -> skip
    ;

myDb = new dbAccess(this); 行之后的onCreate()中

尝试一下。