簡體   English   中英

Android sqlite登錄崩潰

[英]android sqlite login crash

我不擅長在Android上使用sqlite,並且我正在嘗試執行登錄屏幕,基本上我想從數據庫中獲取信息...

package com.kisirdongu.viovideodatabase;

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

public class DBHelper extends SQLiteOpenHelper{

    static final String DATABASE = "videoapp.db";
    static final int VERSION = 1;
    static final String TABLE_USERS = "users";
    static final String TABLE_VIDEOS = "videos";

    static final String U_ID = "_id";
    static final String U_NAME = "uname";
    static final String U_PASS = "upass";

    static final String V_ID = "_id";
    static final String V_NAME = "vname";
    static final String V_URL = "vurl";

public DBHelper(Context context)
{
    super(context, DATABASE, null, VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    // create users table
    db.execSQL("CREATE TABLE " + TABLE_USERS + " ( " + U_ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT, " + U_NAME + " text, "
            + U_PASS + " text )");
    // create videos table
    db.execSQL("CREATE TABLE " + TABLE_VIDEOS + " ( " + V_ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT, " + V_NAME + " text, "
            + V_URL + " text )");
    db.execSQL("INSERT INTO users (uname, upass) VALUES ('serdartepekule', 'simiramisko31')");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE " + TABLE_USERS);
    db.execSQL("DROP TABLE " + TABLE_VIDEOS);
    onCreate(db);
}

}

主要活動

package com.kisirdongu.viovideodatabase;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends Activity implements OnClickListener{
    private EditText et_username, et_password;
    private Button btn_login, btn_about, btn_exit;
    DBHelper dbHelper = null;
    SQLiteDatabase db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);

    et_username = (EditText)findViewById(R.id.et_username);
    et_password = (EditText)findViewById(R.id.et_password);

    btn_login = (Button)findViewById(R.id.btn_login);
    btn_about = (Button)findViewById(R.id.btn_about);
    btn_exit = (Button)findViewById(R.id.btn_exit);

    btn_login.setOnClickListener(this);
    btn_about.setOnClickListener(this);
    btn_exit.setOnClickListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onClick(View v)
{
    if(v == btn_login)
    {
        int length_username = (Integer)et_username.getText().toString().trim().length();
        int length_password = (Integer)et_password.getText().toString().trim().length();
        if(length_username <= 0 || length_password <=0)
        {
            Toast.makeText(getApplicationContext(), "You must enter a valid username or password!", Toast.LENGTH_LONG).show();
        }
        else
        {
            AttempLogin(et_username.getText().toString());
        }
    }
    else if(v == btn_about)
    {
        Intent nextScreen = new Intent(MainActivity.this, AboutActivity.class);
        startActivity(nextScreen);
    }
    else if(v == btn_exit)
    {
        finish();
    }
}

private boolean AttempLogin(String username) {
    // TODO Auto-generated method stub
    String[] columns = {"_id"};
    db = dbHelper.getReadableDatabase();
    String selection = "uname=?";
    String[] selectionArgs = {username};
    Cursor cursor = db.query(DBHelper.TABLE_USERS, columns, selection, selectionArgs, null, null, null);
    if(cursor.getCount() < 1)
    {
        Toast.makeText(getApplicationContext(), "INVALID", Toast.LENGTH_LONG).show();
        return false;
    }
    else
    {
        cursor.moveToFirst();
        String pass= cursor.getString(cursor.getColumnIndex("upass"));
        if(et_password.getText().toString().trim() == pass)
        {
            Toast.makeText(getApplicationContext(), "VALID", Toast.LENGTH_LONG).show();
            return true;
        }
        else
        {
            Toast.makeText(getApplicationContext(), "INVALID", Toast.LENGTH_LONG).show();
            return false;
        }
    }
}
}

我正在使用nullpointerexception ... 3小時找不到解決方案:(

感謝您的幫助!

* LogCat

04-18 20:50:32.725: E/AndroidRuntime(1295): FATAL EXCEPTION: main
04-18 20:50:32.725: E/AndroidRuntime(1295): java.lang.NullPointerException
04-18 20:50:32.725: E/AndroidRuntime(1295):     at         com.kisirdongu.viovideodatabase.MainActivity.AttempLogin(MainActivity.java:85)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at com.kisirdongu.viovideodatabase.MainActivity.onClick(MainActivity.java:68)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at android.view.View.performClick(View.java:3511)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at android.view.View$PerformClick.run(View.java:14105)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at android.os.Handler.handleCallback(Handler.java:605)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at android.os.Looper.loop(Looper.java:137)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at android.app.ActivityThread.main(ActivityThread.java:4424)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at java.lang.reflect.Method.invokeNative(Native Method)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at java.lang.reflect.Method.invoke(Method.java:511)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-18 20:50:32.725: E/AndroidRuntime(1295):     at dalvik.system.NativeStart.main(Native Method)

之所以得到NullPointerException是因為您已將dbHelper設置為null( DBHelper dbHelper = null; ),並且尚未實際實例化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM