从sqlite数据库中搜索用户并授予他登录权限?

时间:2016-02-09 12:19:32

标签: android

我是Android开发新手,我创建了一个正常工作的数据库。但是,当我想从该数据库中搜索用户时,我的应用程序停止工作。我创建了三个类,一个用于create,一个正常工作,一个用于访问db以登录用户和一个databasehelper类

这是我的databaseHelper代码

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DatabaseHelper extends SQLiteOpenHelper {

private static final int DATABASE_VERSION=1;
private static final String DATABASE_NAME="USER.db";
private static final String TABLE_NAME="USER";
private static final String COL_1="ID";
private static final String COL_2="NAME";
private static final String COL_3="EMAIL";
private static final String COL_4="PASS";
SQLiteDatabase db;



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


@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, EMAIL TEXT, PASS TEXT)");

}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXIST "+TABLE_NAME);
    onCreate(db);

}
public void insertData(String name, String email, String pass)
{
    SQLiteDatabase db=this.getWritableDatabase();
    ContentValues values=new ContentValues();
    ContentValues contentValues=new ContentValues();
    contentValues.put(COL_2,name);
    contentValues.put(COL_3,email);
    contentValues.put(COL_4, pass);
   // long result=
    db.insert(TABLE_NAME, null, contentValues);
    //if (result==-1)
      //  return false;
    //else
      //  return true;
    db.close();
}
public String searchUser(String email){
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor cursor = db.rawQuery("select * from "+TABLE_NAME, null);
    String a, b;
    b = "not found";
    if (cursor.moveToFirst()) {
        do {
            a = cursor.getString(0);

            if (a.equals(email)) {
                b = cursor.getString(1);
                break;
            }
        } while (cursor.moveToNext());

    }
    return b;

}

}

这是我想要访问数据库的登录类

public class Login extends AppCompatActivity implements View.OnClickListener {
EditText  editpassword, editemail;
TextView linkRegister;
Button buttonRegister;
DatabaseHelper myDB;

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

    editemail = (EditText) findViewById(R.id.edit_email);
    editpassword = (EditText) findViewById(R.id.edit_password);
    linkRegister=(TextView)findViewById(R.id.LinkRegister);
    buttonRegister=(Button)findViewById(R.id.ButtonSignin);

    buttonRegister.setOnClickListener(this);
    linkRegister.setOnClickListener(this);



}


@Override
public void onClick(View v) {
    switch (v.getId())
    {
        case R.id.LinkRegister:
            startActivity(new Intent(Login.this, Register.class));
            break;
        case R.id.ButtonSignin:
            //Toast mess = Toast.makeText(Login.this, "username and password don't match", Toast.LENGTH_SHORT);
            //mess.show();
            String email=editemail.getText().toString();
            String password=editpassword.getText().toString();
            String dbpassword=myDB.searchUser(email);
            if(password.equals(dbpassword))
            {
                Toast mess = Toast.makeText(Login.this, "username and password matched", Toast.LENGTH_SHORT);
                mess.show();

            }
            else{
                Toast msg = Toast.makeText(Login.this, "username and password don't match", Toast.LENGTH_SHORT);
                msg.show();
            }
           // startActivity(new Intent(Login.this, NewsFeed.class));
            break;

    }

}

}

这是我的Logcat

02-09 17:22:15.321 18955-18955/? D/dalvikvm: Late-enabling CheckJNI
02-09 17:22:15.491 18955-18955/? W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
02-09 17:22:15.491 18955-18955/? I/dalvikvm: Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested
02-09 17:22:15.491 18955-18955/? W/dalvikvm: VFY: unable to resolve interface method 17969: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
02-09 17:22:15.491 18955-18955/? D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
02-09 17:22:15.491 18955-18955/? I/dalvikvm: Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode 
02-09 17:22:15.491 18955-18955/? W/dalvikvm: VFY: unable to resolve interface method 17973: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
02-09 17:22:15.491 18955-18955/? D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
02-09 17:22:15.591 18955-18955/? I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
02-09 17:22:15.591 18955-18955/? W/dalvikvm: VFY: unable to resolve virtual method 424: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
02-09 17:22:15.591 18955-18955/? D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
02-09 17:22:15.591 18955-18955/? I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
02-09 17:22:15.591 18955-18955/? W/dalvikvm: VFY: unable to resolve virtual method 446: Landroid/content/res/TypedArray;.getType (I)I
02-09 17:22:15.591 18955-18955/? D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
02-09 17:22:15.641 18955-18955/? I/dalvikvm: Could not find method android.content.res.Resources.getDrawable, referenced from method android.support.v7.widget.ResourcesWrapper.getDrawable
02-09 17:22:15.641 18955-18955/? W/dalvikvm: VFY: unable to resolve virtual method 387: Landroid/content/res/Resources;.getDrawable (ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
02-09 17:22:15.641 18955-18955/? D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
02-09 17:22:15.641 18955-18955/? I/dalvikvm: Could not find method android.content.res.Resources.getDrawableForDensity, referenced from method android.support.v7.widget.ResourcesWrapper.getDrawableForDensity
02-09 17:22:15.641 18955-18955/? W/dalvikvm: VFY: unable to resolve virtual method 389: Landroid/content/res/Resources;.getDrawableForDensity (IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
02-09 17:22:15.641 18955-18955/? D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
02-09 17:22:15.781 18955-18955/? D/OpenGLRenderer: Enabling debug mode 0
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy D/AndroidRuntime: Shutting down VM
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41631c08)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime: FATAL EXCEPTION: main
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime: Process: com.example.mubbasher.howdy, PID: 18955
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime: java.lang.NullPointerException
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at com.example.mubbasher.howdy.Login.onClick(Login.java:48)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at android.view.View.performClick(View.java:4661)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:19498)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:733)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:146)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5641)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1288)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)
02-09 17:22:33.721 18955-18955/com.example.mubbasher.howdy E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:1)

您忘记在Login类中初始化myDB。

在Login Class的onCreate()方法中写下以下行。

$json = [
        "car": {
                 "name" : "benz",
"name" : "bmw",
"name" : "volvo"
},
"place" : {
"name" : "delhi",
"name" : "newyork",
"name" : "tokyo"
}
]