SQLite - Speichern von Daten verursacht FATAL Exception: Async Task

  • Antworten:3
  • Bentwortet
Florian Schneider
  • Forum-Beiträge: 4

21.12.2011, 11:38:04 via Website

Hallo zusammen,

ich bin neu hier und hab gleich mal ein paar Fragen an euch :grin:

Ich bin gerade dabei eine App für unsere Hochschule zu entwickeln. Eine Funktion dieser App soll das darstellen von News sein, die ich mir aus einem RSS-Feed unserer Hochschule auslesen und anschließend in eine SQLite Datenbank speichern möchte. Das Auslesen und das einfach darstellen der News funktioniert. Um auch eine Offline-Variante bieten zu können sollen die News in einer Datenbank hinterlegt werden und genau hier tritt dieser Fehler auf. Beim schreiben in die Datenbank aus diesem Backgroundtask heraus also in der Zeile 14 db ist dabei eine Instanz meiner Helper Klasse die weiter unten aufgeführt ist. Direkt aus der Activity heraus funktioniert das einfügen auch ohne Probleme, verlagere ich das ganze in den Hintergrund kommt es zum Fehler. Hoffe ihr könnt mir helfen.

LG

1private class DownloadFeedItems extends
2 AsyncTask<String, Integer, ArrayList<FeedItem>> {
3
4 @Override
5 protected ArrayList<FeedItem> doInBackground(String... url) {
6
7 // Download and Parse Feed
8 XmlFeedParser parser = new XmlFeedParser();
9 items = new ArrayList<FeedItem>();
10 items = parser.parse(url[0]);
11
12 Iterator iterator = items.iterator();
13 while (iterator.hasNext()) {
14 db.addFeedItem((FeedItem) iterator.next());
15 }
16 return items;
17 }
18
19 @Override
20 protected void onPostExecute(ArrayList<FeedItem> result) {
21
22 // Feed erfolgreich geladen und wird nun dargestellt
23 displayFeedItem(result);
24
25 }
26 }

1public class SQLiteHelper extends SQLiteOpenHelper {
2
3 // All Static variables
4 // Database Version
5 private static final int DATABASE_VERSION = 1;
6
7 // Database Name
8 private static final String DATABASE_NAME = "dhbw_db";
9
10 // Contacts table name
11 private static final String TABLE_NEWS = "news";
12
13 // Contacts Table Columns names
14 private static final String KEY_ID = "id";
15 private static final String KEY_TITEL = "titel";
16 private static final String KEY_DATE = "date";
17 private static final String KEY_URl = "url";
18 private static final String KEY_DESCRIPTION = "description";
19
20 public SQLiteHelper(Context context) {
21 super(context, DATABASE_NAME, null, DATABASE_VERSION);
22 }
23
24 // Creating Tables
25 public void onCreate(SQLiteDatabase db) {
26 // TABLE NEWS
27 String CREATE_NEWS_TABLE = "CREATE TABLE " + TABLE_NEWS + "(" + KEY_ID
28 + " INTEGER PRIMARY KEY," + KEY_TITEL + " TEXT," + KEY_DATE
29 + " TEXT," + KEY_URl + " TEXT," + KEY_DESCRIPTION + " TEXT"
30 + ")";
31 db.execSQL(CREATE_NEWS_TABLE);
32 }
33
34 // Upgrading database
35 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
36 // Drop older table if existed
37 db.execSQL("DROP TABLE IF EXISTS " + TABLE_NEWS);
38
39 // Create tables again
40 onCreate(db);
41 }
42
43 //addFeedItem
44 public void addFeedItem(FeedItem item) {
45 SQLiteDatabase db = this.getWritableDatabase();
46
47 ContentValues values = new ContentValues();
48 values.put(KEY_TITEL, item.getTitle());
49 values.put(KEY_DATE, item.getDate());
50 values.put(KEY_DESCRIPTION, item.getDescription());
51
52 // Inserting Row
53 db.insert(TABLE_NEWS, null, values);
54 db.close(); // Closing database connection
55 }
56
57}

Antworten
Florian Schneider
  • Forum-Beiträge: 4

21.12.2011, 12:25:21 via Website

Also Stacktrace ist hoffentlich die Console in Eclipse, hier scheint mir alles normal zu sein:

1[2011-12-21 12:19:12 - DHBWApp] ------------------------------
2[2011-12-21 12:19:12 - DHBWApp] Android Launch!
3[2011-12-21 12:19:12 - DHBWApp] adb is running normally.
4[2011-12-21 12:19:12 - DHBWApp] Performing android.dhbw.StartFrame activity launch
5[2011-12-21 12:19:12 - DHBWApp] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'default'
6[2011-12-21 12:19:12 - DHBWApp] Uploading DHBWApp.apk onto device 'emulator-5554'
7[2011-12-21 12:19:23 - DHBWApp] Installing DHBWApp.apk...
8[2011-12-21 12:19:27 - DHBWApp] Success!
9[2011-12-21 12:19:27 - DHBWApp] Starting activity android.dhbw.StartFrame on device emulator-5554
10[2011-12-21 12:19:28 - DHBWApp] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=android.dhbw/.StartFrame }

LogCat sieht so aus:

112-21 11:19:31.706: D/dalvikvm(12197): GC_EXTERNAL_ALLOC freed 64K, 52% free 2607K/5379K, external 966K/1038K, paused 44ms
212-21 11:19:36.326: I/global(12197): Loaded time zone names for en in 3025ms.
312-21 11:19:38.236: I/global(12197): Loaded time zone names for en in 1901ms.
412-21 11:19:38.496: D/dalvikvm(12197): GC_CONCURRENT freed 453K, 54% free 2706K/5767K, external 1142K/1632K, paused 17ms+3ms
512-21 11:19:40.166: I/global(12197): Loaded time zone names for en in 1918ms.
612-21 11:19:42.236: D/dalvikvm(12197): GC_CONCURRENT freed 229K, 51% free 2872K/5767K, external 1142K/1632K, paused 14ms+12ms
712-21 11:19:42.266: I/global(12197): Loaded time zone names for en in 2074ms.
812-21 11:19:44.116: I/global(12197): Loaded time zone names for en in 1751ms.
912-21 11:19:45.915: I/global(12197): Loaded time zone names for en in 1761ms.
1012-21 11:19:46.075: D/dalvikvm(12197): GC_CONCURRENT freed 577K, 55% free 2715K/5959K, external 1142K/1632K, paused 12ms+4ms
1112-21 11:19:47.995: I/global(12197): Loaded time zone names for en in 2067ms.
1212-21 11:19:49.735: I/global(12197): Loaded time zone names for en in 1738ms.
1312-21 11:19:50.315: D/dalvikvm(12197): GC_CONCURRENT freed 370K, 55% free 2729K/5959K, external 1142K/1632K, paused 14ms+4ms
1412-21 11:19:51.685: I/global(12197): Loaded time zone names for en in 1938ms.
1512-21 11:19:53.575: I/global(12197): Loaded time zone names for en in 1883ms.
1612-21 11:19:53.585: W/dalvikvm(12197): threadid=9: thread exiting with uncaught exception (group=0x40015560)
1712-21 11:19:53.585: E/AndroidRuntime(12197): FATAL EXCEPTION: AsyncTask #1
1812-21 11:19:53.585: E/AndroidRuntime(12197): java.lang.RuntimeException: An error occured while executing doInBackground()
1912-21 11:19:53.585: E/AndroidRuntime(12197): at android.os.AsyncTask$3.done(AsyncTask.java:200)
2012-21 11:19:53.585: E/AndroidRuntime(12197): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
2112-21 11:19:53.585: E/AndroidRuntime(12197): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
2212-21 11:19:53.585: E/AndroidRuntime(12197): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
2312-21 11:19:53.585: E/AndroidRuntime(12197): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
2412-21 11:19:53.585: E/AndroidRuntime(12197): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
2512-21 11:19:53.585: E/AndroidRuntime(12197): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
2612-21 11:19:53.585: E/AndroidRuntime(12197): at java.lang.Thread.run(Thread.java:1019)
2712-21 11:19:53.585: E/AndroidRuntime(12197): Caused by: java.lang.NullPointerException
2812-21 11:19:53.585: E/AndroidRuntime(12197): at android.dhbw.eventsnews.EventsNews$DownloadFeedItems.doInBackground(EventsNews.java:122)
2912-21 11:19:53.585: E/AndroidRuntime(12197): at android.dhbw.eventsnews.EventsNews$DownloadFeedItems.doInBackground(EventsNews.java:1)
3012-21 11:19:53.585: E/AndroidRuntime(12197): at android.os.AsyncTask$2.call(AsyncTask.java:185)
3112-21 11:19:53.585: E/AndroidRuntime(12197): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
3212-21 11:19:53.585: E/AndroidRuntime(12197): ... 4 more
3312-21 11:19:54.495: E/WindowManager(12197): Activity android.dhbw.eventsnews.EventsNews has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4050c658 that was originally added here
3412-21 11:19:54.495: E/WindowManager(12197): android.view.WindowLeaked: Activity android.dhbw.eventsnews.EventsNews has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4050c658 that was originally added here
3512-21 11:19:54.495: E/WindowManager(12197): at android.view.ViewRoot.<init>(ViewRoot.java:258)
3612-21 11:19:54.495: E/WindowManager(12197): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
3712-21 11:19:54.495: E/WindowManager(12197): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
3812-21 11:19:54.495: E/WindowManager(12197): at android.view.Window$LocalWindowManager.addView(Window.java:424)
3912-21 11:19:54.495: E/WindowManager(12197): at android.app.Dialog.show(Dialog.java:241)
4012-21 11:19:54.495: E/WindowManager(12197): at android.app.ProgressDialog.show(ProgressDialog.java:107)
4112-21 11:19:54.495: E/WindowManager(12197): at android.app.ProgressDialog.show(ProgressDialog.java:90)
4212-21 11:19:54.495: E/WindowManager(12197): at android.dhbw.eventsnews.EventsNews.downloadEpisodes(EventsNews.java:101)
4312-21 11:19:54.495: E/WindowManager(12197): at android.dhbw.eventsnews.EventsNews.loadRss(EventsNews.java:93)
4412-21 11:19:54.495: E/WindowManager(12197): at android.dhbw.eventsnews.EventsNews.onCreate(EventsNews.java:88)
4512-21 11:19:54.495: E/WindowManager(12197): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
4612-21 11:19:54.495: E/WindowManager(12197): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
4712-21 11:19:54.495: E/WindowManager(12197): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
4812-21 11:19:54.495: E/WindowManager(12197): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
4912-21 11:19:54.495: E/WindowManager(12197): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
5012-21 11:19:54.495: E/WindowManager(12197): at android.os.Handler.dispatchMessage(Handler.java:99)
5112-21 11:19:54.495: E/WindowManager(12197): at android.os.Looper.loop(Looper.java:123)
5212-21 11:19:54.495: E/WindowManager(12197): at android.app.ActivityThread.main(ActivityThread.java:3683)
5312-21 11:19:54.495: E/WindowManager(12197): at java.lang.reflect.Method.invokeNative(Native Method)
5412-21 11:19:54.495: E/WindowManager(12197): at java.lang.reflect.Method.invoke(Method.java:507)
5512-21 11:19:54.495: E/WindowManager(12197): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
5612-21 11:19:54.495: E/WindowManager(12197): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
5712-21 11:19:54.495: E/WindowManager(12197): at dalvik.system.NativeStart.main(Native Method)
5812-21 11:19:54.555: D/dalvikvm(12197): GC_CONCURRENT freed 457K, 55% free 2698K/5959K, external 1142K/1632K, paused 19ms+3ms

Sry bin ziemlich neu in der Welt von Android

Antworten