问题描述
当我点击Checkdata按钮我在CheckData.java DataManipulator.createCertificatesEntry((证书)testCertificates)获得空指针异常;
公共类DataManipulator {
公共静态最后弦乐KEY_IMG =形象;
私人DatabaseHelper mDbHelper;
私人SQLiteDatabase MDB;
私有静态最后弦乐DATABASE_NAME =DBtest;
私有静态最终诠释DATABASE_VERSION = 1;
私有静态最后弦乐CERTIFICATES_TABLE =证书;
私有静态最后弦乐CREATE_CERTIFICATES_TABLE =创建表+ CERTIFICATES_TABLE +(+ KEY_IMG +BLOB NOT NULL);
私人最终语境mCtx;
私有静态类DatabaseHelper扩展SQLiteOpenHelper {
DatabaseHelper(上下文的背景下){
超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
}
公共无效的onCreate(SQLiteDatabase DB){
db.execSQL(CREATE_CERTIFICATES_TABLE);
}
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
db.execSQL(DROP TABLE IF EXISTS+ CERTIFICATES_TABLE);
的onCreate(DB);
}
}
公共无效复位(){mDbHelper.onUpgrade(this.mDb,1,1); }
公共DataManipulator(上下文CTX){
mCtx = CTX;
mDbHelper =新DatabaseHelper(mCtx);
}
公共DataManipulator的open()抛出的SQLException {
MDB = mDbHelper.getWritableDatabase();
回到这一点;
}
公共无效的close(){mDbHelper.close(); }
公共无效createCertificatesEntry(证书证书){
ByteArrayOutputStream OUT =新ByteArrayOutputStream();
certificates.getBitmap()的COM preSS(Bitmap.Com pressFormat.PNG,100,出去)。
ContentValues CV =新ContentValues();
cv.put(KEY_IMG,out.toByteArray());
mDb.insert(CERTIFICATES_TABLE,空,CV);
}
公证书getFirstCertificatesFromDB()抛出的SQLException {
光标CUR = mDb.query(真,CERTIFICATES_TABLE,新的String [] {} KEY_IMG,NULL,NULL,NULL,NULL,NULL,NULL);
如果(cur.moveToFirst()){
byte []的BLOB = cur.getBlob(cur.getColumnIndex(KEY_IMG));
ByteArrayInputStream进行的InputStream =新ByteArrayInputStream的(BLOB);
点阵位图= BitmapFactory.de codeStream(InputStream的);
cur.close();
返回新的证书(位);
}
cur.close();
返回null;
}
}
这是行60 DataManipulator.java certificates.getBitmap()的COM preSS(Bitmap.Com pressFormat.PNG,100,出)的;
公共类CheckData扩展ListActivity {
TextView的选择;
DataManipulator DM;
私人DataManipulator DataManipulator;
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.check);
DM =新DataManipulator(本);
的LinearLayout布局=新的LinearLayout(本);
ImageView的形象=新ImageView的(这一点);
DataManipulator =新DataManipulator(本);
证书testCertificates =新证书(BitmapFactory.de codeFILE(Context.STORAGE_SERVICE));
DataManipulator.open();
DataManipulator.createCertificatesEntry((证书)testCertificates);
DataManipulator.close();
DataManipulator.close();
testCertificates = NULL;
DataManipulator.open();
testCertificates = DataManipulator.getFirstCertificatesFromDB();
DataManipulator.close();
image.setImageBitmap(((证书)testCertificates).getBitmap());
的setContentView(布局);
}
}
这是我CheckData.java线29 DataManipulator.createCertificatesEntry((证书)testCertificates);
这是我的logcat
05-29 14:51:46.908:E / AndroidRuntime(741):致命异常:主要
05-29 14:51:46.908:E / AndroidRuntime(741):java.lang.RuntimeException的:无法启动的活动ComponentInfo {list.certificates / list.certificates.CheckData}:显示java.lang.NullPointerException
05-29 14:51:46.908:E / AndroidRuntime(741):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.app.ActivityThread.access $ 600(ActivityThread.java:122)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1146)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.os.Handler.dispatchMessage(Handler.java:99)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.os.Looper.loop(Looper.java:137)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.app.ActivityThread.main(ActivityThread.java:4340)
05-29 14:51:46.908:E / AndroidRuntime(741):在java.lang.reflect.Method.invokeNative(本机方法)
05-29 14:51:46.908:E / AndroidRuntime(741):在java.lang.reflect.Method.invoke(Method.java:511)
05-29 14:51:46.908:E / AndroidRuntime(741):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
05-29 14:51:46.908:E / AndroidRuntime(741):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-29 14:51:46.908:E / AndroidRuntime(741):在dalvik.system.NativeStart.main(本机方法)
05-29 14:51:46.908:E / AndroidRuntime(741):由:显示java.lang.NullPointerException
05-29 14:51:46.908:E / AndroidRuntime(741):在list.certificates.DataManipulator.createCertificatesEntry(DataManipulator.java:60)
05-29 14:51:46.908:E / AndroidRuntime(741):在list.certificates.CheckData.onCreate(CheckData.java:29)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.app.Activity.performCreate(Activity.java:4465)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-29 14:51:46.908:E / AndroidRuntime(741):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
05-29 14:51:46.908:E / AndroidRuntime(741):11 ...更多
为您传递对象testCertificates,这是空的活动在行DataManipulator.createCertificatesEntry((证书)testCertificates);
在DataManipulator.createCertificatesEntry方法证明是空,所以certificates.getBitmap()将在这里thorugh空指针excption
公共无效createCertificatesEntry(证书证书)
{
ByteArrayOutputStream OUT =新ByteArrayOutputStream();
certificates.getBitmap()的COM preSS(Bitmap.Com pressFormat.PNG,100,出去)。
ContentValues CV =新ContentValues();
cv.put(KEY_IMG,out.toByteArray());
mDb.insert(CERTIFICATES_TABLE,空,CV);
}
所以要么把支票在createCertificatesEntry方法
或
使用这条线从活动传递不为空值DataManipulator.createCertificatesEntry
证书testCertificates =新证书(BitmapFactory.de codeFILE(Context.STORAGE_SERVICE));
以上
DataManipulator.createCertificatesEntry((证书)testCertificates);
when i click on Checkdata button i am getting nullpointer exception in CheckData.java DataManipulator.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;
}
}
this is line 60 of DataManipulator.java certificates.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);
}
}
this is my line 29 of CheckData.javaDataManipulator.createCertificatesEntry( (Certificates) testCertificates);
this is my 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
as you passing the "Object testCertificates" which is null in Activity at line DataManipulator.createCertificatesEntry( (Certificates) testCertificates);
in DataManipulator.createCertificatesEntry method certificates is null so certificates.getBitmap() will thorugh null pointer excption here
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);
}
so either put a check in createCertificatesEntry method
or
pass not null value in DataManipulator.createCertificatesEntry from Activity by using this line
Certificates testCertificates = new Certificates(BitmapFactory.decodeFile(Context.STORAGE_SERVICE));
above
DataManipulator.createCertificatesEntry( (Certificates) testCertificates);
这篇关于在checkdata按钮点击时获得空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!