Получение исключения нулевого указателя при попытке получить данные из базы данных Sqlite с помощью объекта вспомогательного класса

Я хочу получить данные из файла .csv, сохранить их в базе данных Sqlite в первый раз при запуске приложения. После этого извлеките данные из базы данных Sqlite и отобразите в представлении расширяемого списка. Но я получаю исключение нулевого указателя, когда я пытаюсь вызывать методы класса DatabaseHelper с помощью объекта вспомогательного класса.

Помощник по базе данных

  `public Cursor getExpandableData() {
    String query = "SELECT * FROM Category GROUP BY categorydesc";
        return db.rawQuery(query, null);
    }`

  public boolean insertContact(String[] rowData) {
    // TODO Auto-generated method stub
    db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("DistrictCd", rowData[0]);
    contentValues.put("ProspectId", rowData[1]);
    contentValues.put("categorydesc", rowData[2]);
    contentValues.put("BusinessName", rowData[3]);
    contentValues.put("ph_Phone", rowData[4]);
    contentValues.put("LandMark", rowData[5]);
    contentValues.put("CategoryId", rowData[6]);
    db.insert("Category", null, contentValues);
    // check for data is inserted into db or not
    db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("select * from Category", null);
    int noOfRecords = cursor.getCount();
    // if cursor holding some data then data is inserted successfully
    if (noOfRecords != 0) {
        return true;
    } else {
        return false;
    }
    }`

` NearByApp вызывает только запуск приложения

  `public class NearByApp extends Application {
  public void onCreate() {SharedPreferences prefs =  
  PreferenceManager.getDefaultSharedPreferences(this);
  if (!prefs.getBoolean("firstTime", false)) {
        // run only once when app has been launched for the 1st time
        csvToSqlite();
        // mark first time has runned.
        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean("firstTime", true);
        editor.commit();
    }`

    `public void csvToSqlite() {
           //code for fetching data from .csv
            String[] RowData = reader.split(",");
            databaseHelper  = new DatabaseHelper(context);
            if (databaseHelper.insertContact(RowData) == true) {
                Log.i("inside csvToSqlite()", " data inserted     successfully");
            } else {
                Log.i("inside csvToSqlite()",
                        " data is not inserted into db");
            }`

Основное действие

         `protected void onCreate(Bundle savedInstanceState) {
        // Group data//
       databaseHelper = new DatabaseHelper(getApplicationContext());
       Cursor cursor=databaseHelper.getExpandableData();`
        }`

Я получаю исключение в

вернуть db.rawQuery (запрос, ноль);

линия

04-21 14:25:49.810: E/AndroidRuntime(25473): вызвано: java.lang.NullPointerException 04-21 14:25:49.810: E/AndroidRuntime(25473): в com.example.nearbuy.database.DatabaseHelper .getExpandableData(DatabaseHelper.java:308)


person Akanksha Sawarkar    schedule 21.04.2015    source источник
comment
Пожалуйста, отформатируйте / сделайте отступ в коде правильно! Какой NPE вы получаете? с какой строки запускается? что такое трассировка стека?   -  person Nir Alfasi    schedule 21.04.2015
comment
Не могли бы вы показать нам, что говорят ваши журналы ??   -  person Joze    schedule 21.04.2015
comment
Вызвано: java.lang.NullPointerException в com.example.nearbuy.database.DatabaseHelper.getExpandableData(DatabaseHelper.java:308)   -  person Akanksha Sawarkar    schedule 21.04.2015
comment
измените эту строку на databaseHelper = new DatabaseHelper(this); вот так: - databaseHelper = new DatabaseHelper(getApplicationContext()); что делает getExpandableData??? может быть ошибка из-за этого метода.   -  person Pankaj    schedule 21.04.2015
comment
Изменил его, как вы предложили. Тем не менее я получаю такое же исключение. getExpandableData извлекает данные из Sqlite. Я получаю исключение при возврате db.rawQuery(query, null); линия   -  person Akanksha Sawarkar    schedule 21.04.2015
comment
Тогда убедитесь, что ваш db будет null.   -  person Piyush    schedule 22.04.2015


Ответы (1)


Здесь:

mainActivity = new MainActivity();
mainActivity.csvToSqlite();

эти строки вызывают проблему, потому что Activity не запущено, но пытается вызвать метод, создав объект MainActivity.

Итак, вместо вызова csvToSqlite() из класса create MainActivity переместите метод csvToSqlite() в класс NearByApp, чтобы выполнить метод только один раз.

person ρяσѕρєя K    schedule 21.04.2015
comment
Я тоже это пробовал. Но внутри основной активности, когда я пытаюсь получить доступ к методу вспомогательного класса databaseHelper = new DatabaseHelper (this); Курсор курсора=databaseHelper.getExpandableData(); Я получаю исключение нулевого указателя для этого - person Akanksha Sawarkar; 21.04.2015
comment
@AkankshaSawarkar: хорошо, тогда обновите код, используя MainActivity, а также поделитесь журналом сбоев с вопросом - person ρяσѕρєя K; 21.04.2015