Исключение Java nullpointer
привет всем , я делаю форму входа/регистрации в своем приложении для android , я храню информацию, которую пользователь вводит в моей базе данных SQLiteDatabase (класс, который расширяет SQLitOpenHelper и соединяется с базой данных throw ContentProvider) , в регистрационной части я проверяю электронную почту , введенную пользователем, чтобы увидеть, существует ли она уже или нет, я всегда получаю NullPointerException
public class DressHelper extends SQLiteOpenHelper { private static final String TAG = "DressHelper"; public static final String DB_NAME="Dress"; public static final int DB_VERSION=1; private static DressHelper instance; public static DressHelper getInstance(Context c){ if(instance==null){ instance=new DressHelper(c.getApplicationContext()); } return instance; } private DressHelper(Context c){ super(c,DB_NAME,null,DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String DB_CREATE="CREATE TABLE "+ DressContract.Users.Table_NAME+ " ("+ DressContract.Users._ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+ DressContract.Users.NAME+" TEXT NOT NULL,"+ DressContract.Users.EMAIL+" TEXT NOT NULL,"+ DressContract.Users.PASSWORD+" TEXT NOT NULL);"; db.execSQL(DB_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } --------------------------------------------------------------- public class DressProvider extends ContentProvider { private DressHelper helper; public static final String TAG = DressProvider.class.getSimpleName(); private static final int test=1; private static final int test_id=2; private static final UriMatcher urim=new UriMatcher(UriMatcher.NO_MATCH); static{ urim.addURI(DressContract.Users.authorit, DressContract.Users.Table_NAME,test); urim.addURI(DressContract.Users.authorit, DressContract.Users.Table_NAME+"/#",test_id); } @Override public boolean onCreate() { helper= DressHelper.getInstance(getContext()); return true; } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { int match=urim.match(uri); SQLiteDatabase db; db=helper.getReadableDatabase(); Cursor c; switch(match){ case test: c=db.query(DressContract.Users.Table_NAME,projection,selection,selectionArgs,null,null,sortOrder); break; case test_id: selection= DressContract.Users._ID+"=?"; selectionArgs=new String[]{String.valueOf(ContentUris.parseId(uri))}; c=db.query(DressContract.Users.Table_NAME,projection,selection,selectionArgs,null,null,sortOrder); break; default: throw new IllegalStateException("Cannot query form: " + uri); } db.close(); c.close(); return null; } @Nullable @Override public String getType(@NonNull Uri uri) { return null; } @Nullable @Override public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { SQLiteDatabase db; db=helper.getWritableDatabase(); String email=values.getAsString(DressContract.Users.EMAIL); int match=urim.match(uri); switch (match){ case test: int id=(int)(db.insert(DressContract.Users.Table_NAME,null,values)); uri= ContentUris.withAppendedId(uri, id); } db.close(); return uri; } @Override public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { return 0; } @Override public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { return 0; } public boolean verifyUser(String email) { if (helper == null) { helper = DressHelper.getInstance(getContext()); } Log.v(TAG, "helper=" + helper); SQLiteDatabase db = helper.getReadableDatabase(); Cursor c; String pro[] = {DressContract.Users._ID}; String select = DressContract.Users.EMAIL + " =?"; String args[] = {email}; c = db.query(DressContract.Users.Table_NAME, pro, select, args, null, null, null); if (c.getCount() > 0) { return true; } db.close(); return false; } }
Что я уже пробовал:
исключение отображается при последнем методе (verifUser(String email)):
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase com.example.testapp.DatatBaseHelper.getReadableDatabase()' on a null object reference)
Richard MacCutchan
Вам нужно использовать свой отладчик, чтобы выяснить, почему helper не получает действительный объект db.