SLQ db fehler bei get writable database

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SLQ db fehler bei get writable database

    Hallo ich bin gerade dabei meine erste Android App zu programmieren.
    Wir hatten in der Schule noch keine Db aber ich dachte mir, wenn ich den Code aus Android Apps Entwicklung für Dummies einfach übernehme, dann wird das schon funktionieren. Jetzt habe ich aber einen Fehler und weiß nicht woran das liegen könnte. Ich habe schon alles Versucht und im Internet gesucht aber nichts gefunden.
    Hier ist erst mal die LogCat Fehler ausgabe:


    02-02 19:40:42.036: E/Database(656): Failure 1 (near "tableberechner": syntax error) on 0x11a4e0 when preparing 'create tableberechner(_id integer primary key autoincrementPreis/Litertext not null, Litertext not null, Preistext not null, KMtext not null, Datumtext not null);'.
    02-02 19:40:42.056: D/AndroidRuntime(656): Shutting down VM
    02-02 19:40:42.056: W/dalvikvm(656): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    02-02 19:40:42.056: E/AndroidRuntime(656): Uncaught handler: thread main exiting due to uncaught exception
    02-02 19:40:42.066: E/AndroidRuntime(656): java.lang.RuntimeException: Unable to resume activity {com.marcodeubel.berechner/com.marcodeubel.berechner.BerechnerActivity}: android.database.sqlite.SQLiteException: near "tableberechner": syntax error: create tableberechner(_id integer primary key autoincrementPreis/Litertext not null, Litertext not null, Preistext not null, KMtext not null, Datumtext not null);
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2965)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2516)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.os.Handler.dispatchMessage(Handler.java:99)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.os.Looper.loop(Looper.java:123)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.main(ActivityThread.java:4363)
    02-02 19:40:42.066: E/AndroidRuntime(656): at java.lang.reflect.Method.invokeNative(Native Method)
    02-02 19:40:42.066: E/AndroidRuntime(656): at java.lang.reflect.Method.invoke(Method.java:521)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    02-02 19:40:42.066: E/AndroidRuntime(656): at dalvik.system.NativeStart.main(Native Method)
    02-02 19:40:42.066: E/AndroidRuntime(656): Caused by: android.database.sqlite.SQLiteException: near "tableberechner": syntax error: create tableberechner(_id integer primary key autoincrementPreis/Litertext not null, Litertext not null, Preistext not null, KMtext not null, Datumtext not null);
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1610)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.marcodeubel.berechner.BerechnerDbAdapter$DatabaseHelper.onCreate(BerechnerDbAdapter.java:98)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.marcodeubel.berechner.BerechnerDbAdapter.open(BerechnerDbAdapter.java:43)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.marcodeubel.berechner.BerechnerActivity.onResume(BerechnerActivity.java:63)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.Activity.performResume(Activity.java:3763)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)
    02-02 19:40:42.066: E/AndroidRuntime(656): ... 12 more
    02-02 19:40:42.086: I/dalvikvm(656): threadid=7: reacting to signal 3
    02-02 19:40:42.086: E/dalvikvm(656): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
    02-02 19:40:43.946: I/Process(656): Sending signal. PID: 656 SIG: 9
    Ich werde gleich den Quellcode posten. Ich hoffe ihr findet den Fehler ich bin am verzweifeln.
    Vielen Dank schon mal
    LG Marco
  • Hier ist noch der Quelltext:
    Die Klasse BrechnerActivity:

    Java-Quellcode

    1. import android.app.Activity;
    2. import android.content.Context;
    3. import android.content.Intent;
    4. import android.database.Cursor;
    5. import android.os.Bundle;
    6. import android.view.ContextMenu;
    7. import android.view.Menu;
    8. import android.view.MenuItem;
    9. import android.view.View;
    10. import android.view.ContextMenu.ContextMenuInfo;
    11. import android.widget.Button;
    12. import android.widget.EditText;
    13. import android.widget.TextView;
    14. import android.widget.Toast;
    15. import android.R.*;
    16. import java.text.ParseException;
    17. public class BerechnerActivity extends Activity {
    18. /** Called when the activity is first created.*/
    19. private BerechnerDbAdapter mDbHelper;
    20. private Long mRowId;
    21. @Override
    22. public void onCreate(Bundle savedInstanceState) {
    23. super.onCreate(savedInstanceState);
    24. mDbHelper = new BerechnerDbAdapter(this);
    25. setContentView(R.layout.main);
    26. mRowId = savedInstanceState != null ? savedInstanceState.getLong(BerechnerDbAdapter.KEY_ROWID) : null;
    27. setButtonClickListenerberechnen();
    28. }
    29. //Den folgenden Quellcode habe ich aus Android für Dummies und das ist der, der sich auf die Db bezieht
    30. private void setRowIdfromIntent(){
    31. if(mRowId == null){
    32. Bundle extras = getIntent().getExtras();
    33. mRowId = extras != null ? extras.getLong(BerechnerDbAdapter.KEY_ROWID) : null;
    34. }
    35. }
    36. @Override
    37. protected void onPause(){
    38. super.onPause();
    39. mDbHelper.close();
    40. }
    41. @Override
    42. protected void onResume(){
    43. super.onResume();
    44. mDbHelper.open();
    45. setRowIdfromIntent();
    46. populateFields();
    47. }
    48. private void populateFields(){
    49. if (mRowId != null){
    50. Cursor berechner = mDbHelper.fetchBerechner(mRowId);
    51. startManagingCursor(berechner);
    52. }
    53. }
    54. @Override
    55. protected void onSaveInstanceState(Bundle outState){
    56. super.onSaveInstanceState(outState);
    57. outState.putLong(BerechnerDbAdapter.KEY_ROWID, mRowId);
    58. }
    59. //ab hier ist es wieder mein eigener Quellcode
    60. public static final String VERBRAUCH_KEY = "key-verbrauch";
    61. public static final String PREIS_KEY = "key-preis";
    62. public void setButtonClickListenerberechnen() {
    63. final Button bt_berechne = (Button) findViewById(R.id.bt_berechnen);
    64. bt_berechne.setOnClickListener(new View.OnClickListener() {
    65. public void onClick(View v) {
    66. EditText nf_liter = (EditText) findViewById(R.id.lb_liter);
    67. EditText nf_literpreis = (EditText) findViewById(R.id.lb_preisliter);
    68. EditText nf_preis = (EditText) findViewById(R.id.lb_preis);
    69. EditText nf_kilometer = (EditText) findViewById(R.id.lb_kilometer);
    70. int laengekilometer = nf_kilometer.getText().length();
    71. int laengeliter = nf_liter.getText().length();
    72. int laengepreis = nf_preis.getText().length();
    73. int laengeliterpreis = nf_literpreis.getText().length();
    74. if ((laengekilometer == 0)){
    75. Context context = getApplicationContext();
    76. CharSequence text = "Sie müssen die gefahrenen Kilometer eingeben!";
    77. int duration = Toast.LENGTH_SHORT;
    78. Toast toast = Toast.makeText(context, text, duration);
    79. toast.show();
    80. }else{
    81. if((laengeliter == 0) && (laengepreis == 0) && (laengeliterpreis == 0)){
    82. Context context = getApplicationContext();
    83. CharSequence text = "Sie müssen mindestens zwei von drei weiteren Feldern ausfüllen!";
    84. int duration = Toast.LENGTH_SHORT;
    85. Toast toast = Toast.makeText(context, text, duration);
    86. toast.show();
    87. }else if ((laengeliter != 0) && (laengepreis != 0)){
    88. literundpreis();
    89. }else if ((laengeliter != 0) && (laengeliterpreis != 0)){
    90. literundliterpreis();
    91. }else if ((laengepreis != 0) && (laengeliterpreis != 0)){
    92. literpreisundpreis();
    93. }
    94. }
    95. }
    96. });
    97. }
    98. public void ergebnis(double preis, double verbrauch){
    99. final Intent intent = new Intent(this, ErgebnisActivity.class);
    100. intent.putExtra(PREIS_KEY, preis);
    101. intent.putExtra(VERBRAUCH_KEY, verbrauch);
    102. startActivity(intent);
    103. }
    104. public void literundpreis() {
    105. EditText nf_liter = (EditText) findViewById(R.id.lb_liter);
    106. EditText nf_preis = (EditText) findViewById(R.id.lb_preis);
    107. EditText nf_kilometer = (EditText) findViewById(R.id.lb_kilometer);
    108. double liter = Double.parseDouble(nf_liter.getText().toString());
    109. double preis = Double.parseDouble(nf_preis.getText().toString());
    110. double kilometer = Double.parseDouble(nf_kilometer.getText().toString());
    111. preis = preis*0.81;
    112. double verbrauch = liter/kilometer*100;
    113. double preisliter = preis/liter;
    114. saveState(preisliter, preis, liter, kilometer, "test");
    115. ergebnis(preis, verbrauch);
    116. }
    117. public void literundliterpreis(){
    118. EditText nf_liter = (EditText) findViewById(R.id.lb_liter);
    119. EditText nf_literpreis = (EditText) findViewById(R.id.lb_preisliter);
    120. EditText nf_kilometer = (EditText) findViewById(R.id.lb_kilometer);
    121. double literpreis = Double.parseDouble(nf_literpreis.getText().toString());
    122. double kilometer = Double.parseDouble(nf_kilometer.getText().toString());
    123. double liter = Double.parseDouble(nf_liter.getText().toString());
    124. double preis = literpreis*liter;
    125. preis = preis*0.81;
    126. double verbrauch = liter/kilometer*100;
    127. //saveState(literpreis, preis, liter, kilometer);
    128. ergebnis(preis, verbrauch);
    129. }
    130. public void literpreisundpreis(){
    131. EditText nf_literpreis = (EditText) findViewById(R.id.lb_preisliter);
    132. EditText nf_preis = (EditText) findViewById(R.id.lb_preis);
    133. EditText nf_kilometer = (EditText) findViewById(R.id.lb_kilometer);
    134. double literpreis = Double.parseDouble(nf_literpreis.getText().toString());
    135. double preis = Double.parseDouble(nf_preis.getText().toString());
    136. double kilometer = Double.parseDouble(nf_kilometer.getText().toString());
    137. double liter = preis / literpreis;
    138. preis = preis*0.81;
    139. double verbrauch = liter/kilometer*100;
    140. //habe ich auskommentiert, da es nicht funktioniert hat
    141. //saveState(literpreis, preis, liter, kilometer);
    142. ergebnis(preis, verbrauch);
    143. }
    144. public boolean onCreateOptionsMenu(Menu menu){
    145. getMenuInflater().inflate(R.menu.hauptmenu, menu);
    146. return super.onCreateOptionsMenu(menu);
    147. }
    148. public boolean onOptionsItemSelected(MenuItem item){
    149. switch (item.getItemId()){
    150. case R.id.opt_beenden:
    151. finish();
    152. return true;
    153. default:
    154. return super.onOptionsItemSelected(item);
    155. }
    156. }
    157. public void kontextmenu(Bundle icicle) {
    158. registerForContextMenu(findViewById(android.R.id.list));
    159. }
    160. public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
    161. if (v.getId() == android.R.id.list){
    162. getMenuInflater().inflate(R.menu.berechnen_kontextmeneu, menu);
    163. }
    164. super.onCreateContextMenu(menu, v, menuInfo);
    165. }
    166. //hier habe ich versucht in die db etwas zu schreiben
    167. private void saveState(double literpreis, double preis, double liter, double km, String Datum){
    168. String stringliterpreis=Double.toString(literpreis);
    169. String stringpreis=Double.toString(preis);
    170. String stringliter=Double.toString(liter);
    171. String stringkm=Double.toString(km);
    172. if(mRowId == null){
    173. long id = mDbHelper.createBerechner(stringliterpreis, stringliter, stringpreis, stringkm, Datum);
    174. if(id > 0){
    175. mRowId = id;
    176. }else{
    177. mDbHelper.updateBerechner(mRowId, stringliterpreis, stringliter, stringpreis, stringkm, Datum);
    178. }
    179. }
    180. }
    181. }
    Alles anzeigen

    BerechnerDbAdapter:

    Quellcode

    1. import android.content.ContentValues;
    2. import android.content.Context;
    3. import android.database.Cursor;
    4. import android.database.SQLException;
    5. import android.database.sqlite.SQLiteDatabase;
    6. import android.database.sqlite.SQLiteOpenHelper;
    7. public class BerechnerDbAdapter {
    8. private static final String DATABASE_NAME = "data";
    9. private static final String DATABASE_TABLE = "berechner";
    10. private final int DATABASE_VERSION = 1;
    11. public static final String KEY_ROWID = "_id";
    12. public static final String KEY_PREISLITER = "Preis/Liter";
    13. public static final String KEY_PREIS = "Preis";
    14. public static final String KEY_LITER = "Liter";
    15. public static final String KEY_KM = "KM";
    16. public static final String KEY_DATUM = "Datum";
    17. private DatabaseHelper mDbHelper;
    18. private SQLiteDatabase mDb;
    19. private static final String DATABASE_CREATE = "create table" + DATABASE_TABLE + "("
    20. + KEY_ROWID + " integer primary key autoincrement"
    21. + KEY_PREISLITER + "text not null, "
    22. + KEY_LITER + "text not null, "
    23. + KEY_PREIS + "text not null, "
    24. + KEY_KM + "text not null, "
    25. + KEY_DATUM + "text not null);";
    26. private final Context mCtx;
    27. public BerechnerDbAdapter(Context ctx){
    28. this.mCtx = ctx;
    29. }
    30. //ich glaube hier liegt der fehler bin mir aber nicht sicher diese Methode verweist auf die innere Classe weiter unten
    31. public BerechnerDbAdapter open() throws SQLException{
    32. mDbHelper = new DatabaseHelper(mCtx);
    33. mDb = mDbHelper.getWritableDatabase();
    34. return this;
    35. }
    36. public void close(){
    37. mDbHelper.close();
    38. }
    39. public long createBerechner(String PreisProLiter, String Liter, String Preis, String km, String Datum){
    40. ContentValues initialValues = new ContentValues();
    41. initialValues.put(KEY_PREISLITER, PreisProLiter);
    42. initialValues.put(KEY_PREIS, Preis);
    43. initialValues.put(KEY_LITER, Liter);
    44. initialValues.put(KEY_KM, km);
    45. initialValues.put(KEY_DATUM, Datum);
    46. return mDb.insert(DATABASE_TABLE, null, initialValues);
    47. }
    48. public boolean deleteBerechner(long rowId){
    49. return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null)>0;
    50. }
    51. public Cursor fetchAllBerechner(){
    52. return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_PREISLITER, KEY_PREIS, KEY_LITER, KEY_KM, KEY_DATUM}, null, null, null, null, null);
    53. }
    54. public Cursor fetchBerechner(long rowId) throws SQLException{
    55. Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_PREISLITER, KEY_PREIS, KEY_LITER, KEY_KM, KEY_DATUM}, KEY_ROWID + "=" + rowId, null, null, null, null, null);
    56. if(mCursor != null){
    57. mCursor.moveToFirst();
    58. }
    59. return mCursor;
    60. }
    61. public boolean updateBerechner(long rowId, String PreisProLiter, String Preis, String Liter, String km, String Datum){
    62. ContentValues args = new ContentValues();
    63. args.put(KEY_PREISLITER, PreisProLiter);
    64. args.put(KEY_PREIS, Preis);
    65. args.put(KEY_LITER, Liter);
    66. args.put(KEY_KM, km);
    67. args.put(KEY_DATUM, Datum);
    68. return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)>0;
    69. }
    70. //Dies ist die Innere Classe, wo ich den Fehler vermute
    71. public class DatabaseHelper extends SQLiteOpenHelper {
    72. DatabaseHelper(Context context) {
    73. super(context, DATABASE_NAME, null, DATABASE_VERSION);
    74. }
    75. @Override
    76. public void onCreate(SQLiteDatabase db){
    77. db.execSQL(DATABASE_CREATE);
    78. }
    79. @Override
    80. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    81. }
    82. }
    83. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von marco.deubel ()

  • Hi marco.deubel,

    ich vermute mal, dein Fehler liegt hier:

    02-02 19:40:42.036: E/Database(656): Failure 1 (near "tableberechner": syntax error) on 0x11a4e0 when preparing 'create tableberechner(_id integer primary key autoincrementPreis/Litertext not null, Litertext not null, Preistext not null, KMtext not null, Datumtext not null);'.


    im Code wäre das hier:
    private static final String DATABASE_CREATE = "create table" + DATABASE_TABLE + "("
    + KEY_ROWID + " integer primary key autoincrement"
    + KEY_PREISLITER + "text not null, "
    + KEY_LITER + "text not null, "
    + KEY_PREIS + "text not null, "
    + KEY_KM + "text not null, "
    + KEY_DATUM + "text not null);";


    wenn du dir den String ausgeben läßt wirst du es sehen.

    kann es sein das die Methode open() von BerechnerDbAdapter nicht aufgerufen wird. (finde Sie jedenfalls nicht)

    mfg Titus
  • Die Stelle bei autoincrement hab ich auch gefunden. ;)

    Einen weiteren Fehler solltest du noch korrigieren in der Zeile

    Java-Quellcode

    1. public static final String KEY_PREISLITER = "Preis/Liter";


    Weil dieser String in der Datenbank-Erzeugung benutzt wird, ist der "/" ein Problem. Schreib lieber "PreisProLiter". ;)
    Das Leben kann so hart sein, man muss nur richtig wollen!!!
  • Hey vielen Dank ich habe die Fehler verbessert und ich kann die App jetzt ohne Fehler öffnen. Nun habe ich aber eine List View mit der dazugehörigen Activity implementiert. Diese soll eigentlich die Datenbank auslesen und darstellen aber da kommt wieder ein Fehler. Ich bin wirklich am verzweifeln und hoffe es ist wieder so ein simpler Fehler wie bei "Preis/Liter".
    Hier der Quellcode für die Klasse BerechnerListActivity(ist im Manifest natürlich hinzugefügt):

    Java-Quellcode

    1. import android.app.ListActivity;
    2. import android.content.Context;
    3. import android.content.Intent;
    4. import android.database.Cursor;
    5. import android.os.Bundle;
    6. import android.view.ContextMenu;
    7. import android.view.Menu;
    8. import android.view.MenuInflater;
    9. import android.view.MenuItem;
    10. import android.view.View;
    11. import android.view.ContextMenu.ContextMenuInfo;
    12. import android.widget.AdapterView.AdapterContextMenuInfo;
    13. import android.widget.ArrayAdapter;
    14. import android.widget.Button;
    15. import android.widget.EditText;
    16. import android.widget.ListView;
    17. import android.widget.SimpleCursorAdapter;
    18. import android.widget.TextView;
    19. import android.widget.Toast;
    20. import android.R.*;
    21. public class BerechnerListActivity extends ListActivity {
    22. private static final int ACTIVITY_CREATE=0;
    23. private static final int ACTIVITY_EDIT=1;
    24. private BerechnerDbAdapter mDbHelper;
    25. /** Called when the activity is first created.*/
    26. @Override
    27. public void onCreate(Bundle savedInstanceState) {
    28. super.onCreate(savedInstanceState);
    29. setContentView(R.layout.berechner_list);
    30. mDbHelper = new BerechnerDbAdapter(this);
    31. mDbHelper.open();
    32. fillData();
    33. registerForContextMenu(getListView());
    34. }
    35. private void fillData() {
    36. Cursor berechnerCursor = mDbHelper.fetchAllBerechner();
    37. startManagingCursor(berechnerCursor);
    38. String[] from = new String[]{BerechnerDbAdapter.KEY_DATUM};
    39. int[] to = new int[]{R.id.text1};
    40. SimpleCursorAdapter berechner = new SimpleCursorAdapter(this, R.layout.berechner_list, berechnerCursor, from, to);
    41. setListAdapter(berechner);
    42. }
    43. @Override
    44. public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    45. super.onCreateContextMenu(menu, v, menuInfo);
    46. MenuInflater mi = getMenuInflater();
    47. mi.inflate(R.menu.list_menu_item_longpress, menu);
    48. }
    49. @Override
    50. protected void onListItemClick(ListView l, View v, int position, long id){
    51. super.onListItemClick(l, v, position, id);
    52. Intent t = new Intent(this, BerechnerActivity.class);
    53. t.putExtra(BerechnerDbAdapter.KEY_ROWID, id);
    54. startActivityForResult(t, ACTIVITY_EDIT);
    55. }
    56. @Override
    57. protected void onActivityResult(int requestCode, int resultCode, Intent intent){
    58. super.onActivityResult(requestCode, resultCode, intent);
    59. fillData();
    60. }
    61. @Override
    62. public boolean onContextItemSelected(MenuItem item){
    63. switch(item.getItemId()){
    64. case R.id.menu_delete:
    65. AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    66. mDbHelper.deleteBerechner(info.id);
    67. fillData();
    68. return true;
    69. }
    70. return super.onContextItemSelected(item);
    71. }
    72. }
    Alles anzeigen

    Diese rufe ich über einen einfachen Intent auf. Dann gibt es aber einen Laufzeitfehler mit folgenden Ausgaben:

    Quellcode

    1. 02-03 15:16:53.283: W/KeyCharacterMap(274): No keyboard for id 0
    2. 02-03 15:16:53.283: W/KeyCharacterMap(274): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
    3. 02-03 15:16:59.922: D/AndroidRuntime(274): Shutting down VM
    4. 02-03 15:16:59.922: W/dalvikvm(274): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    5. 02-03 15:16:59.922: E/AndroidRuntime(274): Uncaught handler: thread main exiting due to uncaught exception
    6. 02-03 15:16:59.942: E/AndroidRuntime(274): java.lang.RuntimeException: Unable to pause activity {com.marcodeubel.berechner/com.marcodeubel.berechner.BerechnerActivity}: java.lang.NullPointerException
    7. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3162)
    8. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3119)
    9. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3102)
    10. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.ActivityThread.access$2400(ActivityThread.java:119)
    11. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870)
    12. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.os.Handler.dispatchMessage(Handler.java:99)
    13. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.os.Looper.loop(Looper.java:123)
    14. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.ActivityThread.main(ActivityThread.java:4363)
    15. 02-03 15:16:59.942: E/AndroidRuntime(274): at java.lang.reflect.Method.invokeNative(Native Method)
    16. 02-03 15:16:59.942: E/AndroidRuntime(274): at java.lang.reflect.Method.invoke(Method.java:521)
    17. 02-03 15:16:59.942: E/AndroidRuntime(274): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    18. 02-03 15:16:59.942: E/AndroidRuntime(274): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    19. 02-03 15:16:59.942: E/AndroidRuntime(274): at dalvik.system.NativeStart.main(Native Method)
    20. 02-03 15:16:59.942: E/AndroidRuntime(274): Caused by: java.lang.NullPointerException
    21. 02-03 15:16:59.942: E/AndroidRuntime(274): at com.marcodeubel.berechner.BerechnerActivity.onSaveInstanceState(BerechnerActivity.java:94)
    22. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.Activity.performSaveInstanceState(Activity.java:1022)
    23. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1180)
    24. 02-03 15:16:59.942: E/AndroidRuntime(274): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3144)
    25. 02-03 15:16:59.942: E/AndroidRuntime(274): ... 12 more
    26. 02-03 15:16:59.982: I/dalvikvm(274): threadid=7: reacting to signal 3
    27. 02-03 15:16:59.982: E/dalvikvm(274): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
    28. 02-03 15:17:01.823: I/Process(274): Sending signal. PID: 274 SIG: 9
    Alles anzeigen

    Ich habe es versucht nachdem ich Daten in die Db eingetragen habe und auch ohne Daten aber es geht nicht.
    Hier noch mal der Quelltext für den Adapter der Db:

    Java-Quellcode

    1. import android.content.ContentValues;
    2. import android.content.Context;
    3. import android.database.Cursor;
    4. import android.database.SQLException;
    5. import android.database.sqlite.SQLiteDatabase;
    6. import android.database.sqlite.SQLiteOpenHelper;
    7. public class BerechnerDbAdapter {
    8. private static final String DATABASE_NAME = "data";
    9. private static final String DATABASE_TABLE = "berechner";
    10. private final int DATABASE_VERSION = 1;
    11. public static final String KEY_ROWID = "_id";
    12. public static final String KEY_PREISLITER = "PreisProLiter";
    13. public static final String KEY_PREIS = "Preis";
    14. public static final String KEY_LITER = "Liter";
    15. public static final String KEY_KM = "KM";
    16. public static final String KEY_DATUM = "Datum";
    17. private DatabaseHelper mDbHelper;
    18. private SQLiteDatabase mDb;
    19. private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE + " ("
    20. + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    21. + KEY_PREISLITER + " TEXT NOT NULL, "
    22. + KEY_LITER + " TEXT NOT NULL, "
    23. + KEY_PREIS + " TEXT NOT NULL, "
    24. + KEY_KM + " TEXT NOT NULL, "
    25. + KEY_DATUM + " TEXT NOT NULL);";
    26. private final Context mCtx;
    27. public BerechnerDbAdapter(Context ctx){
    28. this.mCtx = ctx;
    29. }
    30. public BerechnerDbAdapter open() throws SQLException{
    31. mDbHelper = new DatabaseHelper(mCtx);
    32. mDb = mDbHelper.getWritableDatabase();
    33. return this;
    34. }
    35. public void close(){
    36. mDbHelper.close();
    37. }
    38. public long createBerechner(String PreisProLiter, String Liter, String Preis, String km, String Datum){
    39. ContentValues initialValues = new ContentValues();
    40. initialValues.put(KEY_PREISLITER, PreisProLiter);
    41. initialValues.put(KEY_PREIS, Preis);
    42. initialValues.put(KEY_LITER, Liter);
    43. initialValues.put(KEY_KM, km);
    44. initialValues.put(KEY_DATUM, Datum);
    45. return mDb.insert(DATABASE_TABLE, null, initialValues);
    46. }
    47. public boolean deleteBerechner(long rowId){
    48. return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null)>0;
    49. }
    50. public Cursor fetchAllBerechner(){
    51. return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_PREISLITER, KEY_PREIS, KEY_LITER, KEY_KM, KEY_DATUM}, null, null, null, null, null);
    52. }
    53. public Cursor fetchBerechner(long rowId) throws SQLException{
    54. Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_PREISLITER, KEY_PREIS, KEY_LITER, KEY_KM, KEY_DATUM}, KEY_ROWID + "=" + rowId, null, null, null, null, null);
    55. if(mCursor != null){
    56. mCursor.moveToFirst();
    57. }
    58. return mCursor;
    59. }
    60. public boolean updateBerechner(long rowId, String PreisProLiter, String Preis, String Liter, String km, String Datum){
    61. ContentValues args = new ContentValues();
    62. args.put(KEY_PREISLITER, PreisProLiter);
    63. args.put(KEY_PREIS, Preis);
    64. args.put(KEY_LITER, Liter);
    65. args.put(KEY_KM, km);
    66. args.put(KEY_DATUM, Datum);
    67. return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)>0;
    68. }
    69. public class DatabaseHelper extends SQLiteOpenHelper {
    70. DatabaseHelper(Context context) {
    71. super(context, DATABASE_NAME, null, DATABASE_VERSION);
    72. }
    73. @Override
    74. public void onCreate(SQLiteDatabase db){
    75. db.execSQL(DATABASE_CREATE);
    76. }
    77. @Override
    78. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    79. }
    80. }
    81. }
    Alles anzeigen

    Vielen Dank für die Hilfe
    Lg Marco
  • Ah kann der Fehler daher kommen, das wenn ich die BerchnerListActivity aus der BerechnerActivity über einen normalen Intent aufrufe, die BerchnerActivity pausiert wird. Wenn das geschieht versucht diese über onSaveInstanceState den aktuellen Status zu speichern. Dies geht aber nicht, da warum auch immer kein Status zum speichern vorliegt.
    Hier noch mal die Methode:

    Java-Quellcode

    1. @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState);outState.putLong(BerechnerDbAdapter.KEY_ROWID, mRowId); }