2011-09-30 71 views
0

我構建了一個閃屏,顯示5秒後,它進入我的主要活動。在這個splashscreen中,我有一個可以檢查應用程序是否第一次打開的boolen,如果是的話,它會將一些東西放入我的數據庫中。但到此爲止,我得到一個NullPointerException。飛濺屏幕中的空指針異常在訪問可繪製時

我不明白爲什麼它不工作。在我看來,它應該。這也非常奇怪,因爲我在沒有錯誤的情況下在demoapp中測試了代碼。

因此,這裏是我的SplashScreenActivity.java

package de.retowaelchli.filterit; 


    import org.apache.http.util.ByteArrayBuffer; 
    import android.app.Activity; 
    import android.content.ContextWrapper; 
    import android.content.Intent; 
    import android.content.SharedPreferences; 
    import android.content.SharedPreferences.Editor; 
    import android.os.Bundle; 
    import android.preference.PreferenceManager; 
    import android.widget.ImageView; 

    import de.retowaelchli.filterit.database.DBAdapter; 
    import de.retowaelchli.filterit.database.SmileyDBAdapter; 

    public class SplashScreenActivity extends Activity { 

     //Variablen definieren 
     public static final String KEY_APP_IS_INITIALIZED = "APP_INITIALIZED"; 

     public SmileyDBAdapter mDbHelper; 
     private DBAdapter db; 

     ImageView iv; 
     ContextWrapper context; 
     ByteArrayBuffer baf; 

     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.splash); 

      //Datenbank filling 
      db = new DBAdapter(this); 
      db.open(); 
      db.close(); 
      mDbHelper = new SmileyDBAdapter(this); 
      startupcheck(); 

      //Splash-Screen Animation 
      Thread splashThread = new Thread() { 

       @Override 
       public void run() { 
       try { 
        int waited = 0; 
        while (waited < 5000) { 
          sleep(100); 
          waited += 100; 
          } 
         } 
         catch (InterruptedException e) { 
          // do nothing 
         } 
        finally { 
         finish(); 
         Intent i = new Intent(); 
         i.setClassName("de.retowaelchli.filterit", 
            "de.retowaelchli.filterit.StartseiteActivity"); 
         startActivity(i); 
         } 
        } 
        }; 
        splashThread.start(); 
     } 

     //Hier wird getestet ob das App bereits die Datenbankeinträge besitzt 
     private void startupcheck(){ 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SplashScreenActivity.this); 
       boolean appIsInitialized = prefs.getBoolean(KEY_APP_IS_INITIALIZED, false); 
       if (appIsInitialized == false){ 

        //Hier werden die Smiley gefüllt 
        devil(); <--THIS IS GIVING ME A NULLPOINTEREXCEPTION 


        //Hier wird eingetragen das die Datenbank gefüllt wurde 
        Editor editor = prefs.edit(); 
        editor.putBoolean(KEY_APP_IS_INITIALIZED, true); 
        editor.commit();     
       } 

      } 

     /** Hier sind alle Datenbank Einträge definiert**/ 
     private void devil(){ 

      int drawableID = context.getResources().getIdentifier("devil", "drawable", getPackageName()); 
      iv.setImageResource(drawableID); 

      String info = String.valueOf(drawableID); 

      mDbHelper.open(); 

      mDbHelper.createSmiley("You received a satanic message", info); 

      mDbHelper.close(); 
     } 
} 

大概的代碼有什麼做的繪製不加載,但我不能想象爲什麼它不加載....

所以,這裏是我的LogCat:

09-30 10:44:04.808: INFO/ActivityManager(1760): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=de.retowaelchli.filterit/.SplashScreenActivity } from pid 3193 
09-30 10:44:04.838: VERBOSE/HtcAppUsageStats(1760): (launch app, package): (Filter It, de.retowaelchli.filterit) 
09-30 10:44:04.858: INFO/ActivityManager(1760): Start proc de.retowaelchli.filterit for activity de.retowaelchli.filterit/.SplashScreenActivity: pid=9074 uid=10150 gids={} 
09-30 10:44:04.868: INFO/SuperPowerSvc(16326): [SuperPowerSvc] App launched: [de.retowaelchli.filterit] 
09-30 10:44:04.918: ERROR/jdwp(9074): Failed sending reply to debugger: Broken pipe 
09-30 10:44:04.918: DEBUG/dalvikvm(9074): Debugger has detached; object registry had 1 entries 
09-30 10:44:05.038: VERBOSE/levels(6925): ::Bundle[{icon-small=17302166, present=true, scale=100, level=75, technology=Li-ion, status=3, voltage=3965, plugged=2, health=2, temperature=270}] 
09-30 10:44:05.548: DEBUG/Database(9074): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, flag = 6 
09-30 10:44:05.548: DEBUG/Database(9074): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, free size = 689 
09-30 10:44:05.578: DEBUG/AndroidRuntime(9074): Shutting down VM 
09-30 10:44:05.578: WARN/dalvikvm(9074): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074): FATAL EXCEPTION: main 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.retowaelchli.filterit/de.retowaelchli.filterit.SplashScreenActivity}: java.lang.NullPointerException 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.os.Looper.loop(Looper.java:143) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.app.ActivityThread.main(ActivityThread.java:4196) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at dalvik.system.NativeStart.main(Native Method) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074): Caused by: java.lang.NullPointerException 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at de.retowaelchli.filterit.SplashScreenActivity.devil(SplashScreenActivity.java:109) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at de.retowaelchli.filterit.SplashScreenActivity.startupcheck(SplashScreenActivity.java:76) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at de.retowaelchli.filterit.SplashScreenActivity.onCreate(SplashScreenActivity.java:40) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780) 
09-30 10:44:05.628: ERROR/AndroidRuntime(9074):  ... 11 more 
09-30 10:44:05.628: WARN/ActivityManager(1760): Force finishing activity de.retowaelchli.filterit/.SplashScreenActivity 
09-30 10:44:06.128: WARN/ActivityManager(1760): Activity pause timeout for HistoryRecord{40a95900 de.retowaelchli.filterit/.SplashScreenActivity} 
09-30 10:44:06.228: WARN/ResourceType(1760): Skipping entry 0x7f040005 in package table 0 because it is not complex! 

Thx for you help pre in advance!

回答

3

我沒有看到任何地方你從onCreate()初始化你的ImageView iv。

+0

我對stupided忘了這一點,THX! – safari

+1

笨從不問問題,你不是其中之一。 :) –

1
ImageView iv; 

,因爲你我以前不初始化這一點,並說iv.setImageResource(drawableID); whic就像null.setImageResource(drawableID);