我不擅长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;
),但实际上尚未实例化它。