#android #constructor #sqlite #android-sqlite
#Android #constructor #sqlite #android-sqlite
Вопрос:
Пожалуйста, не кидайте в меня камнями, но я действительно не могу получить и найти ответ, почему я не могу вызвать метод из класса DB внутри MainActivity… Похоже, я не сделал ничего плохого, но… Исключение NullPointerException каждый раз, когда я пытаюсь, что я делаю не так? Спасибо за любой ответ!
public class MainActivity extends ActionBarActivity{
SQLiteDatabase db;
DBHelper dbHelper;
DB mDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new DBHelper(this);
db = dbHelper.getReadableDatabase();
mDB = new DB();
mDB.fillListView();
}
и второй класс с методом
public class DB {
final String LOG = "phonebookLogs";
private static final String TABLE_NAME = "contacts";
private static final String COL_NAME = "name";
private static final String COL_SURNAME = "surname";
private static final String COL_BIRTHDAY = "birthday";
private static final String COL_SEX = "sex";
private static final String COL_ADRESS = "adress";
private static final String COL_LINK = "link";
private static final String ID = "_id";
Cursor c;
public void fillListView(){
c = db.query(TABLE_NAME, null, null, null, null, null, null);
if(c != null){
if(c.moveToFirst()){
do{
String[] names = {c.getString(c.getColumnIndex(COL_SURNAME)) " "
c.getString(c.getColumnIndex(COL_NAME))};
int[] links = {c.getInt(c.getColumnIndex(COL_LINK))};
if(links[0] == 0){
links[0] = R.drawable.default_contact;
}
Log.d(LOG, "n" links[0] " " names[0]);
}while(c.moveToNext());
}
}else{
Log.d(LOG, "Cursor is null!");
}
}
}
Войти
07-06 23:37:09.929: E/AndroidRuntime(10952): FATAL EXCEPTION: main
07-06 23:37:09.929: E/AndroidRuntime(10952): Process: com.nixsolutions.phonebook, PID: 10952
07-06 23:37:09.929: E/AndroidRuntime(10952): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nixsolutions.phonebook/com.nixsolutions.phonebook.MainActivity}: java.lang.NullPointerException
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2252)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.app.ActivityThread.access$800(ActivityThread.java:139)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.os.Handler.dispatchMessage(Handler.java:102)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.os.Looper.loop(Looper.java:136)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.app.ActivityThread.main(ActivityThread.java:5103)
07-06 23:37:09.929: E/AndroidRuntime(10952): at java.lang.reflect.Method.invokeNative(Native Method)
07-06 23:37:09.929: E/AndroidRuntime(10952): at java.lang.reflect.Method.invoke(Method.java:515)
07-06 23:37:09.929: E/AndroidRuntime(10952): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-06 23:37:09.929: E/AndroidRuntime(10952): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
07-06 23:37:09.929: E/AndroidRuntime(10952): at dalvik.system.NativeStart.main(Native Method)
07-06 23:37:09.929: E/AndroidRuntime(10952): Caused by: java.lang.NullPointerException
07-06 23:37:09.929: E/AndroidRuntime(10952): at com.nixsolutions.phonebook.DB.fillListView(DB.java:26)
07-06 23:37:09.929: E/AndroidRuntime(10952): at com.nixsolutions.phonebook.MainActivity.onCreate(MainActivity.java:63)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.app.Activity.performCreate(Activity.java:5275)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-06 23:37:09.929: E/AndroidRuntime(10952): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2166)
07-06 23:37:09.929: E/AndroidRuntime(10952): ... 11 more
Комментарии:
1. И трассировка стека исключений — это …? 🙂
2. Исключение NullPointerException в строке с «mDB.fillListView();»
3. Пожалуйста, опубликуйте точную трассировку стека…
4. теперь добавлено, извините)
5. если я скопирую этот метод из class DB в MainActivity, все будет работать отлично… Я читал, что это может быть ошибка с eclipse, но кажется странным..
Ответ №1:
Сделать DBHelper и db членами класса DB
Изменить fillListView
public void fillListView(Context context){
dbHelper = new DBHelper(context);
db = dbHelper.getReadableDatabase();
c = db.query(TABLE_NAME, null, null, null, null, null, null);
Вызовите его как
mDB.fillListView(this)