Вопрос по android – получение исключения nullpointer при нажатии кнопки checkdata [duplicate]

2

Possible Duplicate:
nullpointer exception raises when i click on the button

когда я нажимаю кнопку Checkdata, я получаю исключение nullpointer в CheckData.javaDataManipulator.createCertificatesEntry( (Certificates) testCertificates);

public class DataManipulator {
    public static final String KEY_IMG = "image";

     private DatabaseHelper mDbHelper;
        private SQLiteDatabase mDb;

        private static final String DATABASE_NAME = "DBtest";
        private static final int DATABASE_VERSION = 1;

    private static final String CERTIFICATES_TABLE = "certificates";

    private static final String CREATE_CERTIFICATES_TABLE = "create table "+CERTIFICATES_TABLE+" (" +KEY_IMG+" blob not null) ";

    private final Context mCtx;
    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_CERTIFICATES_TABLE);
        }

        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS "+CERTIFICATES_TABLE);
            onCreate(db);
        }
    }
    public void Reset() { mDbHelper.onUpgrade(this.mDb, 1, 1); }

    public DataManipulator(Context ctx) {
        mCtx = ctx;
        mDbHelper = new DatabaseHelper(mCtx);
    }

    public DataManipulator open() throws SQLException {
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() { mDbHelper.close(); }

    public void createCertificatesEntry(Certificates certificates) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        certificates.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out);
        ContentValues cv = new ContentValues();
        cv.put(KEY_IMG, out.toByteArray());
        mDb.insert(CERTIFICATES_TABLE,  null, cv);
    }
    public Certificates getFirstCertificatesFromDB() throws SQLException {
        Cursor cur = mDb.query(true, CERTIFICATES_TABLE,  new String[] {KEY_IMG}, null, null, null, null, null, null);
        if(cur.moveToFirst()) {
            byte[] blob = cur.getBlob(cur.getColumnIndex(KEY_IMG));
            ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            cur.close();
            return new Certificates(bitmap);
        }
        cur.close();
        return null;
    }    
}

это строка 60 из DataManipulator.javacertificates.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out);

public class CheckData extends ListActivity  {     
    TextView selection;
    DataManipulator dm;
    private DataManipulator DataManipulator;
    protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.check);
        dm = new DataManipulator(this);

        LinearLayout layout = new LinearLayout(this);
        ImageView image = new ImageView(this);
        DataManipulator = new DataManipulator(this);

        Certificates testCertificates = new Certificates(BitmapFactory.decodeFile(Context.STORAGE_SERVICE));

        DataManipulator.open();
        DataManipulator.createCertificatesEntry( (Certificates) testCertificates);
        DataManipulator.close(); 

        DataManipulator.close();

        testCertificates = null;

        DataManipulator.open();
        testCertificates = DataManipulator.getFirstCertificatesFromDB();
        DataManipulator.close();

        image.setImageBitmap(((Certificates) testCertificates).getBitmap());
        setContentView(layout);
    }
}   

это моя строка 29 CheckData.java DataManipulator.createCertificatesEntry( (Certificates) testCertificates);

это мой logcat

05-29 14:51:46.908: E/AndroidRuntime(741): FATAL EXCEPTION: main
05-29 14:51:46.908: E/AndroidRuntime(741): java.lang.RuntimeException: Unable to start activity ComponentInfo{list.certificates/list.certificates.CheckData}: java.lang.NullPointerException
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.os.Looper.loop(Looper.java:137)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.app.ActivityThread.main(ActivityThread.java:4340)
05-29 14:51:46.908: E/AndroidRuntime(741):  at java.lang.reflect.Method.invokeNative(Native Method)
05-29 14:51:46.908: E/AndroidRuntime(741):  at java.lang.reflect.Method.invoke(Method.java:511)
05-29 14:51:46.908: E/AndroidRuntime(741):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-29 14:51:46.908: E/AndroidRuntime(741):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-29 14:51:46.908: E/AndroidRuntime(741):  at dalvik.system.NativeStart.main(Native Method)
05-29 14:51:46.908: E/AndroidRuntime(741): Caused by: java.lang.NullPointerException
05-29 14:51:46.908: E/AndroidRuntime(741):  at list.certificates.DataManipulator.createCertificatesEntry(DataManipulator.java:60)
05-29 14:51:46.908: E/AndroidRuntime(741):  at list.certificates.CheckData.onCreate(CheckData.java:29)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.app.Activity.performCreate(Activity.java:4465)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-29 14:51:46.908: E/AndroidRuntime(741):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
05-29 14:51:46.908: E/AndroidRuntime(741):  ... 11 more
какой именно DataManipulator.java:60? Dheeresh Singh
Можете ли вы предоставить код функции createCertificatesEntry, так как здесь testCertificates имеет значение null. Dheeresh Singh
это строка № 28DataManipulator.createCertificatesEntry( (Certificates) testCertificates); samsun
public void createCertificatesEntry (Сертификаты сертификатов) {ByteArrayOutputStream out = new ByteArrayOutputStream (); certificate.getBitmap (). compress (Bitmap.CompressFormat.PNG, 100, out); ContentValues cv = new ContentValues (); cv.put (KEY_IMG, out.toByteArray ()); mDb.insert (CERTIFICATES_TABLE, null, cv); } samsun
где строка № 28? Akram

Ваш Ответ

1   ответ
0

при прохождении & quot; объекта testCertificates & quot; который является нулевым в Activity в строке DataManipulator.createCertificatesEntry ((Certificates) testCertificates);

в методе DataManipulator.createCertificatesEntry сертификаты имеют значение null, поэтому Certificate.getBitmap () будет использовать исключение нулевого указателя здесь

  public void createCertificatesEntry(Certificates certificates) 
    { 
     ByteArrayOutputStream out = new ByteArrayOutputStream();
     certificates.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out);
     ContentValues cv = new ContentValues();
     cv.put(KEY_IMG, out.toByteArray());
     mDb.insert(CERTIFICATES_TABLE, null, cv);
     } 

так что либо ставьте проверку в методе createCertificatesEntry

или же

передайте ненулевое значение в DataManipulator.createCertificatesEntry из Activity с помощью этой строки

Сертификаты testCertificates = новые сертификаты (BitmapFactory.decodeFile (Context.STORAGE_SERVICE));

выше

DataManipulator.createCertificatesEntry ((Сертификаты) testCertificates);

как будто я прохожу не ноль, исключение вызывает samsun
я согласен с @DheereshSingh, попробуйте сделатьCertificates testCertificates = new Certificates(BitmapFactory.decodeFile(Context.STORAGE_SERVICE)); вышеDataManipulator.createCertificatesEntry( (Certificates) testCertificates);
так что теперь вы указываете сертификаты, переданные в createCertificatesEntry, не равно NULL?
да добавил изображения в sqlite, но показывает исключение nullpointer samsun
я пробовал, но показывал ту же ошибку, что и 05-29 14: 38: 00.541: E / AndroidRuntime (640): вызвано: java.lang.NullPointerException 05-29 14: 38: 00.541: E / AndroidRuntime (640) : at list.certificates.DataManipulator.createCertificatesEntry (DataManipulator.java:60) 05-29 14: 38: 00.541: E / AndroidRuntime (640): at list.certificates.CheckData.onCreate (CheckData.java:29) samsun

Похожие вопросы