0

私が問題を抱えているプログラムは、認証に sqlite db を使用するログイン ページと、db にデータを挿入するための登録ページです。データベースにデータを挿入することはできますが、ログイン クラスが認証のために dn から情報を取得しておらず、エラーも発生しません。

ログインクラスに printstackrtace() を入れましたが、情報が実際に何を言っているのかわかりません。

デシベルクラス:

     public class LoginDB extends SQLiteOpenHelper {



//Table attributes
public static final String DATABASE_NAME = "logindatadb";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME_CREDENTIALS = "credentials";

// Data attributes
public static final String COLUMN_NAME_USERNAME = "username";
public static final String COLUMN_NAME_PASSWORD = "passcode";

private static SQLiteOpenHelper DBHelper;
private static SQLiteDatabase db;



public LoginDB(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub      

        String sqlDataStore = "create table if not exists " +
        TABLE_NAME_CREDENTIALS + " ("+ BaseColumns._ID + " integer primary key autoincrement,"

                    + COLUMN_NAME_USERNAME + " text not null,"
                    + COLUMN_NAME_PASSWORD + " text not null);";

        db.execSQL(sqlDataStore);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        if(oldVersion == 1 && newVersion == 2){
            //Upgrade the database
    }   

}

    public static boolean Login(String username, String password) {
        Cursor c =  db.rawQuery(
                "SELECT * FROM " + DATABASE_NAME + " WHERE "
                        + COLUMN_NAME_USERNAME + " = '" + username +"' AND "+ COLUMN_NAME_PASSWORD +" = '"+ password +"'" ,  null);
       if (c.getCount()>0)
          return true;
          return false;
    }

    public void open() {
        // TODO Auto-generated method stub
        db = DBHelper.getWritableDatabase();
    }
    public void close() {
        db.close();
    }

}

登録:

    private void insertCredentials(RegDetails regDetails){

        LoginDB androidOpenDBHelper = new LoginDB(this);

        SQLiteDatabase sqliteDB = androidOpenDBHelper.getWritableDatabase();

        ContentValues contentValues = new ContentValues();

        contentValues.put(LoginDB.COLUMN_NAME_USERNAME, rUsername);
        contentValues.put(LoginDB.COLUMN_NAME_PASSWORD, rPasscode);

        long affectedColumnid = sqliteDB.insert(LoginDB.TABLE_NAME_CREDENTIALS, null, contentValues);

        Toast.makeText(getApplicationContext(), "Credentials Saved! Please login" + affectedColumnid, Toast.LENGTH_SHORT).show();

        sqliteDB.close();
        finish();
    }   

  }

ログイン:

            lsLogin.setOnClickListener (new OnClickListener() {

                @Override
                public void onClick(View v) {
                    //check login
                    String username = lsUsername.getText().toString();
                    String password = lsPassword.getText().toString();
                    try{
                        if(username.length()>0 && password.length()>0)
                        {
                            LoginDB dbUser = new LoginDB(LoginScrExample.this);
                            dbUser.open();

                        if(LoginDB.Login(username, password)) {
                            Intent goToNextActivity = new Intent(getApplicationContext(), menu.class);
                            startActivity(goToNextActivity);

                                Toast.makeText(LoginScrExample.this,"Login Sucessful",Toast.LENGTH_LONG).show();
                            }else{
                                Toast.makeText(LoginScrExample.this,"Invalid Username/Password",Toast.LENGTH_LONG).show();
                            }
                        dbUser.close();
                            }
                    }
                    catch(Exception err){
                        err.printStackTrace();
                        Toast.makeText(LoginScrExample.this," Something is wrong " ,Toast.LENGTH_LONG).show();

                    }

                    }
                       {

                       }    

                                            }
                            );

認証が試行されたときの Logcat:

     08-23 14:34:58.713: W/System.err(1396): java.lang.NullPointerException
     08-23 14:34:58.733: W/System.err(1396):    at com.LoginScr.Example.LoginDB.open(LoginDB.java:68)
     08-23 14:34:58.733: W/System.err(1396):    at com.LoginScr.Example.LoginScrExample$1.onClick(LoginScrExample.java:53)
     08-23 14:34:58.733: W/System.err(1396):    at android.view.View.performClick(View.java:3511)
     08-23 14:34:58.733: W/System.err(1396):    at android.view.View$PerformClick.run(View.java:14105)
     08-23 14:34:58.753: W/System.err(1396):    at android.os.Handler.handleCallback(Handler.java:605)
     08-23 14:34:58.753: W/System.err(1396):    at android.os.Handler.dispatchMessage(Handler.java:92)
     08-23 14:34:58.763: W/System.err(1396):    at android.os.Looper.loop(Looper.java:137)
     08-23 14:34:58.775: W/System.err(1396):    at android.app.ActivityThread.main(ActivityThread.java:4424)
     08-23 14:34:58.775: W/System.err(1396):    at java.lang.reflect.Method.invokeNative(Native Method)
     08-23 14:34:58.775: W/System.err(1396):    at java.lang.reflect.Method.invoke(Method.java:511)
     08-23 14:34:58.783: W/System.err(1396):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
     08-23 14:34:58.783: W/System.err(1396):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
     08-23 14:34:58.783: W/System.err(1396):    at dalvik.system.NativeStart.main(Native Method)
     08-23 14:35:20.533: W/IInputConnectionWrapper(1396): showStatusIcon on inactive InputConnection
4

1 に答える 1

1
  db = DBHelper.getWritableDatabase();

これをに変更してみてください

     db = this.getWritableDatabase();

ヘルパークラス名がdbhelperではなく、DBHelperを宣言したばかりなので、コンパイルエラーが表示されません。

于 2012-08-25T04:49:52.130 に答える