每当用户从 viewPager 按下项目内的按钮时,我都会尝试重新加载 viewPager。这种情况下的相关类是SetupActivity和Adapter。在活动类中,我已经创建了两个函数来重新加载 viewPager:
public void deleteSession(String title) {
dbHelper = new DatabaseHelper(this);
((DatabaseHelper) dbHelper).deleteRow(title);
}
和
public void refreshAdapter () {
dbHelper = new DatabaseHelper(this);
Cursor dataCursor = ((DatabaseHelper) dbHelper).getData();
models = new ArrayList<>();
while (dataCursor.moveToNext()) {
models.add(new Model(
dataCursor.getString(1),
dataCursor.getInt(2),
dataCursor.getInt(3),
dataCursor.getInt(4)
));
}
adapter = new Adapter(models, this);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(0, true);
}
所以基本上,deleteSession()从数据库中删除一个特定的项目。refreshAdapter()从数据库中读取更新的数据并为 viewPager 设置一个新的适配器。如果我从类中的 OnClick 事件中调用它们,这些函数工作正常SetupActivity。但是,如果我尝试从Adapter类中的 OnClick 事件中调用它们,应用程序会崩溃并出现以下错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDatabasePath(java.lang.String)' on a null object reference
at android.content.ContextWrapper.getDatabasePath(ContextWrapper.java:327)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:352)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:322)
at com.example.android.slink.DatabaseHelper.getData(DatabaseHelper.java:69)
at com.example.android.slink.SetupActivity.refreshAdapter(SetupActivity.java:436)
at com.example.android.slink.Adapter$3.onClick(Adapter.java:111)
at android.view.View.performClick(View.java:6669)
at android.view.View.performClickInternal(View.java:6638)
小怪兽爱吃肉
相关分类