Android: исключение NullPointerException для getWritableDatabase () - PullRequest
2 голосов
/ 13 сентября 2011

Здесь я пытаюсь получить доступ к базе данных:

UserDataAdapter dbHelper = new UserDataAdapter(this);
dbHelper.open();
dbHelper.createNetwork(network);
dbHelper.close();

UserDataAdapter.java:

public UserDataAdapter open() throws SQLException {
        dbHelper = new DatabaseHelper(context); // of class DatabaseHelper
        database = dbHelper.getWritableDatabase(); // this line!!   
        return this;
    }

DatabaseHelper.java:

public DatabaseHelper(Context context) {
        super(context, Defines.DATABASE_NAME, null, Defines.DATABASE_VERSION);
    }

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(Defines.DATABASE_CREATE_TAXI_SERVICE_DATABASE);
    }

Крушения: 09-13 18: 12: 33.119: E

RROR/AndroidRuntime(7488): FATAL EXCEPTION: main
09-13 18:12:33.119: ERROR/AndroidRuntime(7488): java.lang.NullPointerException
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.database.UserDataAdapter.open(UserDataAdapter.java:29)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.FetchNetworks.addToDatabase(FetchNetworks.java:107)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.FetchNetworks.access$1(FetchNetworks.java:105)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.FetchNetworks$1.onResponseReceived(FetchNetworks.java:75)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.async.CallbackWrapper.run(CallbackWrapper.java:15)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.os.Handler.handleCallback(Handler.java:587)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.os.Looper.loop(Looper.java:145)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.app.ActivityThread.main(ActivityThread.java:4937)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at java.lang.reflect.Method.invokeNative(Native Method)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at java.lang.reflect.Method.invoke(Method.java:521)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at dalvik.system.NativeStart.main(Native Method)

Другие детали:

  • Цель: Android-7
  • Тестовое устройство: HTC Desire

Ответы [ 3 ]

4 голосов
/ 13 сентября 2011

Убедитесь, что ваш Context установлен правильно или нет.

private Context context;
private SQLiteDatabase database;
private DatabaseHelper dbHelper;

public UserDataAdapter(Context context) {
    this.context = context;
}

public UserDataAdapter open() throws SQLException
{
    dbHelper = new DatabaseHelper(context);
    database = dbHelper.getWritableDatabase();
    return this;
}
1 голос
/ 23 апреля 2012

К вашему сведению: у меня была ошибка NullPointerException со стандартной реализацией ContentProvider.Я наконец-то решил ее, и ключ связан с контекстом / намерением в файле манифеста.

В конце я пропустил эту строку из своей деятельности моего манифеста.

<data android:mimeType="vnd.android.cursor.dir/vnd.pmp.smsmessage" />

Оформить заказОбразец блокнота для чего я говорю.Также я предпочитаю использовать структуру здесь http://www.vogella.com/articles/AndroidSQLite/article.html, однако, поскольку его проект рассчитан на 3.0, пришлось исключить все вещи загрузчика для реализации 2.2 ...

После помещения его в мою базу данных, созданную иЯ мог бы вставить строки.Я протестировал это, просто используя onCreate для моей активности по умолчанию.

ContentValues values = new ContentValues();
values.put("somefieldname","somevalue");
values.put("otherfieldname","othervalue");
getContentResolver().insert(MyProvider.CONTENT_URI, values);
0 голосов
/ 17 февраля 2015

Это происходит, когда вы пытаетесь открыть базу данных из конструктора Service или Activity.Попробуйте переместить открытие в onCreate ().

...