我正在尝试获取在使用 SQLite 数据库的 Android 上运行的电话簿。
我正在努力解决的问题是,当我单击下一个按钮时,我希望显示数据库中的下一行数据。但是,当我运行应用程序时,我不断收到此错误
03-10 12:05:22.455: E/AndroidRuntime(772): 致命异常: main 03-10 12:05:22.455: E/AndroidRuntime(772): java.lang.RuntimeException: 无法实例化活动 ComponentInfo{com. example.adressbooktake2/com.example.adressbooktake2.MainActivity}:java.lang.NullPointerException
这是我正在使用的代码,
MainActivity.Java
public class MainActivity extends Activity {
DBAdaptor db = new DBAdaptor(this);
int count = 1;
Cursor cursor = db.getallRecord();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayRecord(cursor);
}
public void Nextdata (View view){
if (cursor.moveToNext())
{
DisplayRecord(cursor);
}
}
public void Previousdata (View view){
if (cursor.moveToPrevious())
{
DisplayRecord(cursor);
}
}
public void DisplayRecord(Cursor c) {
EditText nameTxt = (EditText)findViewById(R.id.Name);
EditText phoneTxt = (EditText)findViewById(R.id.Phone);
EditText emailTxt = (EditText)findViewById(R.id.Email);
nameTxt.setText(c.getString(1));
phoneTxt.setText(c.getString(2));
emailTxt.setText(c.getString(3));//
}
DBAdaptor.Java
package com.example.adressbooktake2;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdaptor {
public static final String KEY_ROWID = "id";
public static final String KEY_NAME = "name";
public static final String KEY_PHONENUMBER = "phone";
public static final String KEY_EMAIL = "email";
private static final String TAG = "DBAdaptor";
public static final String DATABASE_NAME = "AddressBookDataBase1";
public static final String DATABASE_TABLE = "AddressBook";
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_CREATE = "create table if not exists AddressBook (id integer primary key autoincrement, "
+ "name VARCHAR, phone VARCHAR, email VARCHAR);";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdaptor(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
try
{
db.execSQL(DATABASE_CREATE);
}
catch (SQLException e)
{
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w(TAG, "Upgrading database from version " + oldVersion + " to" + newVersion +
", which will destroy all old data");
db.execSQL("Drop TABLE IF EXISTS AddressBook");
onCreate(db);
}
}
//--counts rows in database--
public int rowCounter()
{
Cursor mCount= db.rawQuery("select count(*) from AddressBook where id=" + KEY_ROWID, null);
mCount.moveToFirst();
int rowCount= mCount.getInt(0);
return rowCount;
}
//--opens the database---
public DBAdaptor open() throws SQLException
{
db = DBHelper.getWritableDatabase(); //Line 88
return this;
}
//--close the dabatabase
public void close()
{
DBHelper.close();
}
//--insert a record into database--
public long insertRecord(String name, String email, String phone)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NAME, name);
initialValues.put(KEY_EMAIL, email);
initialValues.put(KEY_PHONENUMBER, phone);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//--deletes a record
public void deleteRecord(long rowId)
{
db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null);
}
//--retrieves a particular record--
public Cursor getRecord(long rowId) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
KEY_EMAIL, KEY_PHONENUMBER}, KEY_ROWID + "=" + rowId, null, null, null, null, null);
if (mCursor !=null) {
mCursor.moveToFirst();
}
return mCursor;
}
//--Retrieves all data--
public Cursor getallRecord() throws SQLException
{
{
Cursor gaCursor = db.rawQuery("SELECT* FROM " + DATABASE_TABLE, null);
if (gaCursor !=null)
{
gaCursor.moveToFirst();
}
return gaCursor;
}
}
}
如果您能看到我哪里出错了,我们将不胜感激任何可以提供的帮助。
异常的完整堆栈跟踪是(2),
03-10 13:07:39.579: E/AndroidRuntime(770): 致命异常: main 03-10 13:07:39.579: E/AndroidRuntime(770): java.lang.RuntimeException: 无法实例化活动 ComponentInfo{com. example.adressbooktake2/com.example.adressbooktake2.MainActivity}: java.lang.NullPointerException 03-10 13:07:39.579: E/AndroidRuntime(770): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 03 -10 13:07:39.579: E/AndroidRuntime(770): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 android.app .ActivityThread.access$600(ActivityThread.java:141) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 03-10 13: 07:39.579:E/AndroidRuntime(770):在 android.os.Handler。dispatchMessage(Handler.java:99) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 android.os.Looper.loop(Looper.java:137) 03-10 13:07:39.579: E/ AndroidRuntime(770): 在 android.app.ActivityThread.main(ActivityThread.java:5039) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 java.lang.reflect.Method.invokeNative(Native Method) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 java.lang.reflect.Method.invoke(Method.java:511) 03-10 13:07:39.579: E/AndroidRuntime(770): 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 03-10 13:07:39.579: E/AndroidRuntime(770): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:560) 03-10 13:07:39.579: E/AndroidRuntime(770): at dalvik.system.NativeStart.main(Native Method) 03-10 13:07:39.579: E/AndroidRuntime(770): Caused作者:java.lang。NullPointerException 03-10 13:07:39.579: E/AndroidRuntime(770): 在 android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:229) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 android .database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 03- 10 13:07:39.579: E/AndroidRuntime(770): at com.example.adressbooktake2.DBAdaptor.open(DBAdaptor.java:88) 03-10 13:07:39.579: E/AndroidRuntime(770): at com. example.adressbooktake2.MainActivity.(MainActivity.java:20) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 java.lang.Class.newInstanceImpl(Native Method) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 java.lang.Class.newInstance(Class.java:1319) 03-10 13:07:39.579: E/AndroidRuntime(770): 在 android.app.Instrumentation.newActivity(Instrumentation.java:1054) 03-10 13:07:39.579: E/AndroidRuntime(770): 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)