【问题标题】:Showing different screen first time app is run首次运行应用程序时显示不同的屏幕
【发布时间】:2012-09-20 21:38:52
【问题描述】:

以下代码有什么问题?

SharedPreferences mPreferences;

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

    setContentView(R.layout.splash);
        new Handler().postDelayed(new Runnable() {

            public void run() {
                init();
                callFunc();
            }

        }, SPLASH_DISPLAY_LENGHT);
        // }
    }

    boolean firstTime() {
        boolean firstTime = mPreferences.getBoolean("firstTime", true);
        if (firstTime) {
            SharedPreferences.Editor editor = mPreferences.edit();
            editor.putBoolean("firstTime", false);
            editor.commit();
            return true;
        } else {
            return false;
        }
    }

    void callFunc(){
        if(firstTime()){
            callDetailedScreen();           
        }
        else{
            CallMainScreen();   
        }
    }

日志猫

09-21 03:28:58.948: E/AndroidRuntime(314): FATAL EXCEPTION: main
09-21 03:28:58.948: E/AndroidRuntime(314): java.lang.NullPointerException
09-21 03:28:58.948: E/AndroidRuntime(314):  at com.x.y.Main.firstTime(Main.java:38)
09-21 03:28:58.948: E/AndroidRuntime(314):  at com.x.y.callFunc(Main.java:50)
09-21 03:28:58.948: E/AndroidRuntime(314):  at com.x.y.Main$2.run(Main.java:30)
09-21 03:28:58.948: E/AndroidRuntime(314):  at android.os.Handler.handleCallback(Handler.java:587)
09-21 03:28:58.948: E/AndroidRuntime(314):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-21 03:28:58.948: E/AndroidRuntime(314):  at android.os.Looper.loop(Looper.java:123)
09-21 03:28:58.948: E/AndroidRuntime(314):  at android.app.ActivityThread.main(ActivityThread.java:4627)
09-21 03:28:58.948: E/AndroidRuntime(314):  at java.lang.reflect.Method.invokeNative(Native Method)
09-21 03:28:58.948: E/AndroidRuntime(314):  at java.lang.reflect.Method.invoke(Method.java:521)
09-21 03:28:58.948: E/AndroidRuntime(314):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-21 03:28:58.948: E/AndroidRuntime(314):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-21 03:28:58.948: E/AndroidRuntime(314):  at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 为什么要使用延迟处理程序来发布此启动画面?
  • 所以这段代码是启动画面?
  • 不...你有例外吗?

标签: android multithreading sharedpreferences


【解决方案1】:

根据您发布的代码和您的 logcat,您没有实例化您的 SharedPreferences。

【讨论】:

    【解决方案2】:

    您需要加载您的首选项,应该这样做。放在 onCreate 中。

    mPreferences = android.preference.PreferenceManager
                .getDefaultSharedPreferences(this);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多