您好我正在尝试填充列表视图我在主要Acivity上使用以下内容来连接我的数据库处理程序
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
List<Patients> patientsList= new ArrayList<Patients>();
patientsList = _db.getALlPatients();
ArrayAdapter<Patients> adapter = new ArrayAdapter<Patients>
this,android.R.layout.simple_list_item_1,patientsList);
ListView lv= (ListView) findViewById(R.id.listView);
lv.setAdapter(adapter);
}
我的GetAllPatients()如下
public List<Patients> getALlPatients() {
List<Patients> _patients = new ArrayList<Patients>();
SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS, null);
if (cursor.moveToFirst()) {
do {
_patients.add(new Patients(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4),cursor.getString(5), Uri.parse(cursor.getString(6))));
}
while (cursor.moveToNext());
}
if (cursor.getCount()==0)
{
_patients.add(new Patients(1,"David Buckley","","","","",null));
_patients.add(new Patients(2,"James Buckley","","","","",null));
}
cursor.close();
db.close();
return _patients;
}
问题
正如您所见,我使用if (cursor.getCount()==0)
插入一些测试数据作为测试,但在启动应用程序时,我从编译器中获得以下内容:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.okason.Cautio/com.davidbuckley.Cautio.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.davidbuckley.Cautio.Dal.DatabaseHandler.getALlPatients()' on a null object reference
我认为这与db的写访问有关。我正在使用以下
创建 public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT," + KEY_PHONE + " TEXT," + KEY_EMAIL + " TEXT," + KEY_ADDRESS + " TEXT," + KEY_IMAGEURI + " TEXT)");
}
public void createContact(Patients contact) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName());
values.put(KEY_PHONE, contact.getPhone());
values.put(KEY_CONTACTPHONE, contact.get_contactPhone());
values.put(KEY_EMAIL, contact.getEmail());
values.put(KEY_ADDRESS, contact.getAddress());
values.put(KEY_IMAGEURI, contact.getImageURI().toString());
db.insert(TABLE_CONTACTS, null, values);
db.close();
}
任何人都有任何想法,我如何浏览设备上的数据库是否有任何检查文件结构的方法?
更新我用此初始化db的treid。
列出patientsList = new ArrayList();
DatabaseHandler db = new DatabaseHandler(this);
patientsList = db.getALlPatients();
ArrayAdapter<Patients> adapter = new ArrayAdapter<Patients>(this,android.R.layout.simple_list_item_1,patientsList);
ListView lv= (ListView) findViewById(R.id.listView);
lv.setAdapter(adapter);
但现在它只是在加载时因同样的错误而崩溃。
尝试在空对象上调用虚方法'java.util.List com.davidbuckley.Cautio.Dal.DatabaseHandler.getALlPatients()'参考
答案 0 :(得分:0)
关于浏览数据库(假设您正在使用SQLite),可以使用DBBrowser检查表结构和内容。虽然这样做,但您需要首先提取应用程序数据库文件并通过DBBrowser加载它。这在使用虚拟机时没有问题,因为您可以使用ADM来拉取它,但是从物理设备中提取数据库文件会有点困难,因为如果首先要获取访问应用程序的数据库文件的位置,则需要root。存储。
Here's指向DBBrowser的链接
答案 1 :(得分:0)
这是我对这种情况的看法。 你看到这一行
patientsList = _db.getALlPatients();
此版本_db
尚未在onCreate之前的任何位置初始化。
我认为你想做的只是
List<Patients> patientsList = getALlPatients();
你应该解决这个问题。