M
MezzoMix
Neues Mitglied
- 0
Hallo,
ich bin noch relativ neu in der Appentwicklung und benötige nun eure Hilfe. Ich möchte eine App erstellen, die aus einer Datenbank Kategorien und Artikel liest. Diese besteht aus mehreren Activities. Es funktioniert nun fast alles. Allerdings bekomme ich, wenn ich die dritte Activiety, die mir den Artikel ausgeben soll, aufrufe, die im Titel genannte Fehlermeldung:
Der Fehler liegt in der onCreate(), bei ArtikelSpeicher.refresh2(). Wenn ich dies auskommentiere, funktioniert alles wunderbar.
Meine ArtikelSpeicher.class:
Errorlog, mit der ich leider nichts anfangen kann:
Wäre wirklich super, wenn mir jemand weiter helfen könnte. Schon mal ein Danke im Voraus!
ich bin noch relativ neu in der Appentwicklung und benötige nun eure Hilfe. Ich möchte eine App erstellen, die aus einer Datenbank Kategorien und Artikel liest. Diese besteht aus mehreren Activities. Es funktioniert nun fast alles. Allerdings bekomme ich, wenn ich die dritte Activiety, die mir den Artikel ausgeben soll, aufrufe, die im Titel genannte Fehlermeldung:
Code:
package de.medizin.paediatrie;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import de.[...].db.ArtikelSpeicher;
public class ArtikelActivity extends Activity{
static final String IN_PARAM_ID = "ARTIKEL_ID";
Long sentId;
String content = "In this change, you create a TextView with the class constructor, which accepts an Android Context instance as its parameter. A Context is a handle to the system; it provides services like resolving resources, obtaining access to databases and preferences, and so on. The Activity class inherits from Context, and because your HelloAndroid class is a subclass of Activity, it is also a Context. So, you can pass this as your Context reference to the TextView.";
private ArtikelSpeicher ArtikelSpeicher;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sentId = savedInstanceState != null ?
savedInstanceState.getLong(IN_PARAM_ID) : null;
if (sentId == null) {
Bundle extras = getIntent().getExtras();
sentId = extras != null ? extras.getLong(IN_PARAM_ID) : null;
}
int temp = safeLongToInt(sentId);
TextView tv = new TextView(this);
tv.setText("Hello: " + temp);
setContentView(tv);
ArtikelSpeicher.refresh2();
}
private void zeigeArtikel() {
Artikel artikel = ArtikelSpeicher.ladeArtikel(sentId);
if (artikel == null) {
return;
}
final TextView fldAnzahlMeldungen =
(TextView) findViewById(R.id.textview);
fldAnzahlMeldungen.setText(String.valueOf(artikel.getContent()));
}
public static int safeLongToInt(long l) {
if (l < Integer.MIN_VALUE || l > Integer.MAX_VALUE) {
throw new IllegalArgumentException
(l + " cannot be cast to int without changing its value.");
}
return (int) l;
}
}
Der Fehler liegt in der onCreate(), bei ArtikelSpeicher.refresh2(). Wenn ich dies auskommentiere, funktioniert alles wunderbar.
Meine ArtikelSpeicher.class:
Code:
package de.medizin.paediatrie.db;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;
import de.medizin.paediatrie.Artikel;
import de.medizin.paediatrie.Eintrag;
public class ArtikelSpeicher {
private static final String TAG = ArtikelSpeicher.class.getSimpleName();
private SQLiteStatement stmtInsertArtikel;
private PaediatrieDb db;
/**
*
* @param context muss mitgegeben werden, damit die Datenbank
* exklusiv für die Anwendung verwaltet werden kann.
*/
public ArtikelSpeicher(Context context) {
db = new PaediatrieDb(context);
SQLiteDatabase medizinDb = db.getWritableDatabase();
stmtInsertArtikel = medizinDb.compileStatement(
PaediatrieDb.T_Artikel.STMT_FULL_INSERT);
}
/**
* schließe die Datenbankverbindung
*/
public void schliesseSpeicher() {
db.close();
}
public Artikel ladeArtikel(long artieklId) throws SQLException {
Cursor c = db.getReadableDatabase().query(
PaediatrieDb.T_Artikel.TABLE_NAME,
null,
PaediatrieDb.T_Artikel.COL_ARTIKEL_ID+" = ?",
new String[] { "" + artieklId },
null,null,null);
if (c == null || c.moveToFirst() == false) {
return null;
}
try {
Artikel neuerArtikel = new Artikel(
c.getLong(c.getColumnIndexOrThrow(PaediatrieDb.T_Artikel.COL_ARTIKEL_ID)),
c.getString(c.getColumnIndexOrThrow(PaediatrieDb.T_Artikel.COL_INHALT)),
c.getInt(c
.getColumnIndexOrThrow(PaediatrieDb.T_Artikel.COL_ABSTAMMUNG)));
return neuerArtikel;
} finally {
c.close();
}
}
public Cursor ladeArtikelC()
throws SQLException {
Cursor c = db.getWritableDatabase().query(
false,
PaediatrieDb.T_Kategorien.TABLE_NAME,
null,
null,
null, null, null, null,
null);
if (c == null || c.moveToFirst() == false) {
return null;
}
return c;
}
/**
*
* @param staumeldung
* @return
* @throws SQLException
*/
public long schreibeArtikel(Artikel artikel)
throws SQLException {
SQLiteDatabase medizinDb = db.getWritableDatabase();
medizinDb.beginTransaction();
long neuerArtikel = -1;
try {
stmtInsertArtikel.bindString(1, artikel.getContent());
stmtInsertArtikel.bindLong(2, artikel.getBelong());
neuerArtikel = stmtInsertArtikel.executeInsert();
medizinDb.setTransactionSuccessful();
} catch (Throwable ex) {
Log
.e(TAG, "Fehler beim Einfügen. "
+ ex);
} finally {
medizinDb.endTransaction();
}
return neuerArtikel;
}
public void refresh() {
db.writeTestdata();
}
public void refresh2() {
//db.writeTestdata( content, belong );
Log.i(TAG, "test");
}
}
Errorlog, mit der ich leider nichts anfangen kann:
Code:
11-09 14:07:07.102: E/AndroidRuntime(32304): FATAL EXCEPTION: main
11-09 14:07:07.102: E/AndroidRuntime(32304): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.medizin.paediatrie/de.medizin.paediatrie.ArtikelActivity}: java.lang.NullPointerException
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.os.Handler.dispatchMessage(Handler.java:99)
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.os.Looper.loop(Looper.java:123)
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-09 14:07:07.102: E/AndroidRuntime(32304): at java.lang.reflect.Method.invokeNative(Native Method)
11-09 14:07:07.102: E/AndroidRuntime(32304): at java.lang.reflect.Method.invoke(Method.java:507)
11-09 14:07:07.102: E/AndroidRuntime(32304): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-09 14:07:07.102: E/AndroidRuntime(32304): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-09 14:07:07.102: E/AndroidRuntime(32304): at dalvik.system.NativeStart.main(Native Method)
11-09 14:07:07.102: E/AndroidRuntime(32304): Caused by: java.lang.NullPointerException
11-09 14:07:07.102: E/AndroidRuntime(32304): at de.medizin.paediatrie.ArtikelActivity.onCreate(ArtikelActivity.java:35)
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-09 14:07:07.102: E/AndroidRuntime(32304): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
11-09 14:07:07.102: E/AndroidRuntime(32304): ... 11 more
Wäre wirklich super, wenn mir jemand weiter helfen könnte. Schon mal ein Danke im Voraus!