我正在尝试将数据库中的数据插入DecisionDatabase
类。但是当涉及到行ourDatabase.insert(DB_TABLE, null, cv);
时
它抛出一个NullPointerException
。它没有打开DecisionDatabase
类日志说:Couldn't open database aySonuDecisionDB.sql
。我试图找到它为什么不打开数据库,但很难找到。
这是app的主类。
public class Main extends FragmentActivity {
EditText bakici, arabaKredisi, ogrenimKredisi, tatilKredisi, elektrik;
EditText su, internet, aidat, kasko, digerTaksitler;
EditText diger, maasSelo, maasHilal, digerGelirler;
TextView toplamGelir, toplamHarcama, eldeKalan;
Spinner yil, ay;
LinearLayout row17, row18, row19;
TemporaryDatabase tdb;
AySonuDatabase aDb;
DecisionDatabase dDb;
MainFragment mainFragment = new MainFragment();
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();;
private final String TAG = this.getClass().getSimpleName();
int toplamgelir, toplamharcama = 0, eldekalan = 0;
int bakicii, arabakredisi, ogrenimkredisi, tatilkredisi, elektrikk;
int suu, internett, aidatt, kaskoo, digergelirler, maasselo, maashilal;
int digertaksitler, digerr, yil2;
String ay2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Widget tanımlamaları
toplamGelir = (TextView) findViewById(R.id.editTextToplamGelir);
digerGelirler = (EditText) findViewById(R.id.editTextDigerGelirler);
toplamHarcama = (TextView) findViewById(R.id.editTextToplamHarcama);
diger = (EditText) findViewById(R.id.editTextDiger);
digerTaksitler = (EditText) findViewById(R.id.editTextDigerTaksitler);
kasko = (EditText) findViewById(R.id.editTextKaskoSigorta);
aidat = (EditText) findViewById(R.id.editTextAidat);
internet = (EditText) findViewById(R.id.editTextFaturaInternet);
su = (EditText) findViewById(R.id.editTextFaturaSu);
elektrik = (EditText) findViewById(R.id.editTextFaturaElektrik);
tatilKredisi = (EditText) findViewById(R.id.editTextTatilKredisi);
ogrenimKredisi = (EditText) findViewById(R.id.editTextOgrenimKredisi);
arabaKredisi = (EditText) findViewById(R.id.editTextKrediAraba);
bakici = (EditText) findViewById(R.id.editTextBakici);
eldeKalan = (TextView) findViewById(R.id.editTextEldeKalan);
maasSelo = (EditText) findViewById(R.id.editTextMaasSelo);
maasHilal = (EditText) findViewById(R.id.editTextMaasHilal);
yil = (Spinner) findViewById(R.id.spinnerYillar);
ay = (Spinner) findViewById(R.id.spinnerAylar);
row17 = (LinearLayout) findViewById(R.id.tableRow17);
row18 = (LinearLayout) findViewById(R.id.tableRow18);
row19 = (LinearLayout) findViewById(R.id.tableRow19);
// Button etki tepkileri
Button hesapla, getir, kaydet;
hesapla = (Button) findViewById(R.id.buttonHesapla);
getir = (Button) findViewById(R.id.buttonGetir);
kaydet = (Button) findViewById(R.id.buttonKaydet);
kaydet.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
kaydeden();
}
});
hesapla.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
hesaplayan();
}
});
getir.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int yil2 = Integer.valueOf(yil.getSelectedItem().toString());
String ay2 = ay.getSelectedItem().toString();
tdb.Entry(yil2, ay2);
row17.setVisibility(1);
row18.setVisibility(1);
row19.setVisibility(1);
if (mainFragment != null)
transaction.remove(mainFragment);
fragment();
}
});
Log.i(TAG, "mainonCreate");
}
// Bütçe hesaplamalarını yapan yordam
protected void hesaplayan() {
bakicii = Integer.valueOf(bakici.getText().toString());
arabakredisi = Integer.valueOf(arabaKredisi.getText().toString());
ogrenimkredisi = Integer.valueOf(ogrenimKredisi.getText().toString());
tatilkredisi = Integer.valueOf(tatilKredisi.getText().toString());
elektrikk = Integer.valueOf(elektrik.getText().toString());
suu = Integer.valueOf(su.getText().toString());
internett = Integer.valueOf(internet.getText().toString());
aidatt = Integer.valueOf(aidat.getText().toString());
kaskoo = Integer.valueOf(kasko.getText().toString());
digergelirler = Integer.valueOf(digerGelirler.getText().toString());
maasselo = Integer.valueOf(maasSelo.getText().toString());
maashilal = Integer.valueOf(maasHilal.getText().toString());
digertaksitler = Integer.valueOf(digerTaksitler.getText().toString());
digerr = Integer.valueOf(diger.getText().toString());
toplamharcama = bakicii + arabakredisi + ogrenimkredisi + tatilkredisi
+ elektrikk + suu + internett + aidatt + kaskoo
+ digertaksitler + digerr;
toplamHarcama.setText(String.valueOf(toplamharcama));
toplamgelir = maashilal + maasselo + digergelirler;
toplamGelir.setText(String.valueOf(toplamgelir));
eldekalan = toplamgelir - toplamharcama;
eldeKalan.setText(String.valueOf(eldekalan));
row17.setVisibility(0);
row18.setVisibility(0);
row19.setVisibility(0);
Log.i(TAG, "mainHesaplayan");
}
// Bütçe hesaplamalarını veritabanına kaydeden yordam.
protected void kaydeden() {
boolean didItWork = false;
boolean isDataInDatabase = false;
int i;
try {
yil2 = Integer.valueOf(yil.getSelectedItem().toString());
ay2 = ay.getSelectedItem().toString();
isDataInDatabase = aDb.Entry(yil2, ay2, bakicii, arabakredisi,
ogrenimkredisi, tatilkredisi, elektrikk, suu, internett,
aidatt, kaskoo, digertaksitler, digerr, maasselo,
maashilal, digergelirler, toplamharcama, toplamgelir,
eldekalan);
if (isDataInDatabase) {
FragmentManager fm = getSupportFragmentManager();
MyDialogFragment testDialog = new MyDialogFragment();
testDialog.setRetainInstance(true);
testDialog.show(fm, "MyDialogFragment");
i = dDb.getDecisionData();
switch (i) {
case 0:
aDb.EntryWithoutDialog(yil2, ay2, bakicii, arabakredisi,
ogrenimkredisi, tatilkredisi, elektrikk, suu,
internett, aidatt, kaskoo, digertaksitler, digerr,
maasselo, maashilal, digergelirler, toplamharcama,
toplamgelir, eldekalan);
didItWork = true;
break;
default:
break;
}
} else
didItWork = true;
} catch (Exception e) {
didItWork = false;
Log.i("Log", e.getMessage() + "Error!");
} finally {
if (didItWork)
Toast.makeText(Main.this, "DBEntrySucceed", Toast.LENGTH_LONG)
.show();
else
Toast.makeText(Main.this, "NoDBEntry", Toast.LENGTH_LONG)
.show();
Log.i(TAG, "mainKaydeden");
}
}
// Seçilen ay ve yılın bütçesini ekrana fragment yardımıyla yazdıran yordam.
public void fragment() {
try {
transaction.add(R.id.mainLinLay, mainFragment);
transaction.addToBackStack(null);
transaction.commit();
// Log
Log.i(TAG, "mainfragment");
} catch (Exception e) {
// TODO: handle exception
Log.i(TAG, "mainfragmentException");
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
aDb = new AySonuDatabase(Main.this);
aDb.open();
tdb = new TemporaryDatabase(Main.this);
tdb.open();
dDb = new DecisionDatabase(Main.this);
dDb.open();
Log.i(TAG, "mainonResume");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
tdb.close();
aDb.close();
dDb.close();
Log.i(TAG, "mainonPause");
}
和片段类;
public class MyDialogFragment extends DialogFragment{
Context mContext=getActivity();
boolean decision;
DecisionDatabase dDb=new DecisionDatabase(mContext);
int i;
private final String TAG = this.getClass().getSimpleName();
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setTitle("Aynı tarihli kayit var!!!");
alertDialogBuilder.setMessage("Kaydetmek istediğinizden emin misiniz?");
dDb.open();
//null should be your on click listener
alertDialogBuilder.setPositiveButton("Evet", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
i=0;
dDb.delete();
dDb.EntryDecision(i);
dDb.close();
dialog.dismiss();
}
});
alertDialogBuilder.setNegativeButton("Hayır", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
i=1;
dDb.delete();
dDb.EntryDecision(i);
dDb.close();
dialog.dismiss();
}
});
Log.i(TAG, "MyDialogFragmentOnCreateDialog");
return alertDialogBuilder.create();
}
@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
dDb.close();
Log.i(TAG, "MyDialogFragmentOnStop");
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "MyDialogFragmentOnStart");
}
}
和DecisionDatabase类;
public class DecisionDatabase {
public static final String TAG = DbHelperTemporary2.class.getSimpleName();
public static final String DB_NAME = "aySonuDecisionDB.sql";
private static int DB_PATH = R.string._data_data_com_bilge_aysonu_assets_;
public static final int DB_VERSION = 1;
public static final String DB_TABLE = "decision";
public static final String C_ID = "_id";// Special for id
public static final String C_DECISION = "dialogDecision";
public static final String CREATE_TABLE = "CREATE TABLE decision (_id integer primary key autoincrement, "
+ "dialogDecision integer);";
private DbHelperTemporary2 dbHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
public static class DbHelperTemporary2 extends SQLiteOpenHelper {
public DbHelperTemporary2(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate sql: " + CREATE_TABLE);
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + DB_TABLE);
Log.w(TAG, "onUpdate drop table " + DB_TABLE);
onCreate(db);
}
}
public DecisionDatabase(Context c) {
super();
ourContext = c;
Log.i(TAG, "DecisionDatabaseConstructor");
}
public void openDatabase() throws SQLException {
ourDatabase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null,
SQLiteDatabase.OPEN_READWRITE);
}
public void open() throws NumberFormatException {
try {
dbHelper = new DbHelperTemporary2(ourContext);
ourDatabase = dbHelper.getWritableDatabase();
Log.i(TAG, "DecisionDatabaseOpen");
return;
} catch (Exception e) {
Log.d(TAG, "Couldn't open database " + DB_NAME);
e.printStackTrace();
} finally {
}
}
public void close() {
dbHelper.close();
ourDatabase.close();
}
public void delete (){
if(ourDatabase!=null)
ourDatabase.delete(DB_TABLE, null, null);
}
public void EntryDecision(int decision) {
int decisionentry=decision;
ContentValues cv = new ContentValues();
cv.put(C_DECISION, decisionentry);
ourDatabase.insert(DB_TABLE, null, cv);
cv.clear();
Log.i(TAG, "DecisionDatabaseEntryDecision");
}
public int getDecisionData() {
Cursor c = ourDatabase.query(DB_TABLE, null, null, null, null, null,
null);
String[] result = new String[1];
int i_decision = c.getColumnIndex(C_DECISION);
if (c.moveToFirst()) {
result[0] = c.getString(i_decision);
} else
result[0] = "2";
c.close();
Log.i(TAG, "DecisionDatabaseGetDecisionData");
return Integer.parseInt(result[0]);
}
}
这是log和Exception;
06-08 11:16:37.869: I/Main(326): mainonCreate
06-08 11:16:37.909: I/DatabaseHelper(326): AysonuDatabaseConstructor
06-08 11:16:38.351: D/DatabaseHelper(326): onCreate sql: CREATE TABLE harcamalar (c_id integer primary key autoincrement,spinnerYillar integer,spinnerAylar TEXT,editTextBakici integer,editTextKrediAraba integer,editTextKrediOgrenim integer,editTextKrediTatil integer,editTextFaturaElektrik integer,editTextFaturaSu integer,editTextFaturaInternet integer,editTextAidat integer,editTextKaskoSigorta integer,editTextDigerTaksitler integer,editTextDiger integer,editTextMaasSelo integer,editTextMaasHilal integer,editTextDigerGelirler integer,editTextToplamHarcama integer,editTextToplamGelir integer, editTextEldeKalan integer, UNIQUE (spinnerYillar,spinnerAylar) ON CONFLICT REPLACE);
06-08 11:16:38.369: I/DatabaseHelper(326): AysonuDatabaseOncreate
06-08 11:16:38.399: I/DatabaseHelper(326): AysonuDatabaseOpen
06-08 11:16:38.409: I/DbHelperTemporary(326): TemporaryDatabaseConstructor
06-08 11:16:38.579: D/DbHelperTemporary(326): onCreate sql: CREATE TABLE ayyil (_id integer primary key autoincrement,spinnerYillar integer,spinnerAylar TEXT, dialogDecision integer);
06-08 11:16:38.639: I/DbHelperTemporary(326): TemporaryDatabaseOpen
06-08 11:16:38.669: I/DbHelperTemporary2(326): DecisionDatabaseConstructor
06-08 11:16:38.929: D/DbHelperTemporary2(326): onCreate sql: CREATE TABLE decision (_id integer primary key autoincrement, dialogDecision integer);
06-08 11:16:38.990: I/DbHelperTemporary2(326): DecisionDatabaseOpen
06-08 11:16:38.999: I/Main(326): mainonResume
06-08 11:17:50.229: W/KeyCharacterMap(326): No keyboard for id 0
06-08 11:17:50.240: W/KeyCharacterMap(326): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
06-08 11:18:42.569: I/Main(326): mainHesaplayan
06-08 11:19:32.549: I/DatabaseHelper(326): AysonuDatabaseEntryElse
06-08 11:19:32.639: I/Main(326): mainKaydeden
06-08 11:19:40.059: I/DatabaseHelper(326): AysonuDatabaseEntryIf
06-08 11:19:40.069: I/DbHelperTemporary2(326): DecisionDatabaseConstructor
06-08 11:19:40.119: I/DbHelperTemporary2(326): DecisionDatabaseGetDecisionData
06-08 11:19:40.169: I/Main(326): mainKaydeden
06-08 11:19:40.190: D/DbHelperTemporary2(326): Couldn't open database aySonuDecisionDB.sql
06-08 11:19:40.190: W/System.err(326): java.lang.NullPointerException
06-08 11:19:40.209: W/System.err(326): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
06-08 11:19:40.209: W/System.err(326): at com.bilge.aysonu.DecisionDatabase.open(DecisionDatabase.java:69)
06-08 11:19:40.219: W/System.err(326): at com.bilge.aysonu.MyDialogFragment.onCreateDialog(MyDialogFragment.java:23)
06-08 11:19:40.239: W/System.err(326): at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295)
06-08 11:19:40.239: W/System.err(326): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
06-08 11:19:40.249: W/System.err(326): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
06-08 11:19:40.269: W/System.err(326): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
06-08 11:19:40.289: W/System.err(326): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
06-08 11:19:40.289: W/System.err(326): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
06-08 11:19:40.309: W/System.err(326): at android.os.Handler.handleCallback(Handler.java:587)
06-08 11:19:40.309: W/System.err(326): at android.os.Handler.dispatchMessage(Handler.java:92)
06-08 11:19:40.330: W/System.err(326): at android.os.Looper.loop(Looper.java:123)
06-08 11:19:40.330: W/System.err(326): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-08 11:19:40.339: W/System.err(326): at java.lang.reflect.Method.invokeNative(Native Method)
06-08 11:19:40.339: W/System.err(326): at java.lang.reflect.Method.invoke(Method.java:521)
06-08 11:19:40.360: W/System.err(326): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-08 11:19:40.360: W/System.err(326): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-08 11:19:40.369: W/System.err(326): at dalvik.system.NativeStart.main(Native Method)
06-08 11:19:40.383: I/MyDialogFragment(326): MyDialogFragmentOnCreateDialog
06-08 11:19:40.839: I/MyDialogFragment(326): MyDialogFragmentOnStart
06-08 11:38:26.058: E/AndroidRuntime(326): FATAL EXCEPTION: main
06-08 11:38:26.058: E/AndroidRuntime(326): java.lang.NullPointerException
06-08 11:38:26.058: E/AndroidRuntime(326): at com.bilge.aysonu.DecisionDatabase.EntryDecision(DecisionDatabase.java:94)
06-08 11:38:26.058: E/AndroidRuntime(326): at com.bilge.aysonu.MyDialogFragment$2.onClick(MyDialogFragment.java:44)
06-08 11:38:26.058: E/AndroidRuntime(326): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
06-08 11:38:26.058: E/AndroidRuntime(326): at android.os.Handler.dispatchMessage(Handler.java:99)
06-08 11:38:26.058: E/AndroidRuntime(326): at android.os.Looper.loop(Looper.java:123)
06-08 11:38:26.058: E/AndroidRuntime(326): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-08 11:38:26.058: E/AndroidRuntime(326): at java.lang.reflect.Method.invokeNative(Native Method)
06-08 11:38:26.058: E/AndroidRuntime(326): at java.lang.reflect.Method.invoke(Method.java:521)
06-08 11:38:26.058: E/AndroidRuntime(326): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-08 11:38:26.058: E/AndroidRuntime(326): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-08 11:38:26.058: E/AndroidRuntime(326): at dalvik.system.NativeStart.main(Native Method)
感谢您的帮助...
答案 0 :(得分:0)
我认为这可能是因为在插入EntryDesicion方法之前调用了delete,因此删除了您的表。该表已删除,因此您无法在其上插入任何数据