0

ユーザー名が既に存在するかどうかを確認したいので、以下に示すコードで、このコードをprotected void onCreate(Bundle savedInstanceState){//put this code inside here に入れます。正しいですか?}

public boolean verification(String _username) {
        Cursor c = db.rawQuery( "SELECT COUNT(*) FROM " + "LOGIN" + " WHERE " + "USERNAME" + " = ?", new String[] {_username});
        boolean exists = c.moveToFirst();
        c.close();
        return exists;
    }

ユーザーが登録ボタンをクリックしたときにこれを確認したいので、以下に示すコードをpublic void onClick(View v) に入れます {//このコードをここに入れます、正しいですか?}

// check if user is exists?         
            if(verification(userName) == true){
                Toast.makeText(getApplicationContext(), "Username already exists", Toast.LENGTH_LONG).show();
                return;
                }

アプリケーションを実行して登録ボタンをクリックすると、アプリが強制的に閉じられました。次のようにlogcatを取得します。 logcat エラー

何か案が?またはユーザー名が一意であることを確認する方法は? すみません、まだ初心者です。

EDIT 問題は、私のコードが以下の場合に解決されました:

if(loginDataBaseAdapter.verification(userName) == false){
                Toast.makeText(getApplicationContext(), "Username already exists", Toast.LENGTH_LONG).show();
                return;
                }

しかし、ユーザーを確認することはできません。trueまたはfalseを入力しますか?

4

2 に答える 2

3

これは NPE ケースで、行 87 が原因です。上記で述べたように、行 87 は

Cursor c = db.rawQuery( "SELECT COUNT(*) FROM " + "LOGIN" + " WHERE " + "USERNAME" + " = ?", new String[] {_username});

である参照を操作しようとしているため、この例外が発生していますnull。ここでその変数はdbです。

クエリを実行する前に null チェックを入れる必要があります。

if(null == db){
// Initialize your db
}

また、次のリンクは、Android のデータベースについて知るのに役立ちます http://www.vogella.com/articles/AndroidSQLite/article.html

于 2013-05-19T07:17:43.000 に答える