2012-05-29 3 views
2

가능한 중복 :
nullpointer exception raises when i click on the button점점 nullpointer 예외가 checkdata 버튼을 클릭하면

난 ((내가 CheckData.java DataManipulator.createCertificatesEntry에 nullpointer 예외를 얻고있다 Checkdata 버튼을 클릭하면 인증서) 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; 
    }  
} 

이 DataManipulator.java certificates.getBitmap()의 라인 (60) 인 압축 (아웃 Bitmap.CompressFormat.PNG, 100).;

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); 
    } 
} 

은 CheckData.java DataManipulator.createCertificatesEntry ((인증서) testCertificates)의 제 29 행이다;

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 
+0

여기서 testCertificates가 null이므로 createCertificatesEntry 함수의 코드를 제공 할 수 있습니까? –

+0

행 번호 28은 어디에 있습니까? – Akram

+0

public void createCertificatesEntry (인증서 인증서) { \t ByteArrayOutputStream out = new ByteArrayOutputStream(); \t certificates.getBitmap(). compress (Bitmap.CompressFormat.PNG, 100, out); \t ContentValues ​​cv = new ContentValues ​​(); \t cv.put (KEY_IMG, out.toByteArray()); \t mDb.insert (CERTIFICATES_TABLE, null, cv); DataManipulator.java:60 정확히 어떤 ** – samsun

답변

0

당신이 줄 활동에 DataManipulator.createCertificatesEntry ((인증서) testCertificates) 널 (null)입니다 "개체 testCertificates"을 통과 나의 로그 캣입니다; certificates.getBitmap()가 여기에 널 포인터 excption을 thorugh 있도록 DataManipulator.createCertificatesEntry 방법 인증서에

가 null

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 방법에 체크를

또는

통과하지 넣어 이 줄을 사용하여 Activity의 DataManipulator.createCertificatesEntry에서 null 값

Certif testCertificates = 새 인증서 (BitmapFactory.decodeFile (Context.STORAGE_SERVICE));

DataManipulator.createCertificatesEntry ((인증서) testCertificates) 상술;

+0

마치 null을 전달하는 것처럼 예외가 발생합니다 – samsun

+0

그래서 지금은 syaing입니다 createCertificatesEntry에서 전달 된 인증서가 null이 아니십니까? –

+1

@DheereshSingh에 동의하고,'DataManipulator.createCertificatesEntry ((Certificates) testCertificates); 위의''Certificates testCertificates = new Certificates (BitmapFactory.decodeFile (Context.STORAGE_SERVICE));를 실행 해 보자. – idiottiger

관련 문제