0

問題は、メインクラス内にonConfigurationChangedを持つlivewallpaperがあることです。

コードは

 public void onConfigurationChanged (Configuration newConfig){
       if(MODE == 0) {   
        if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
            {
                    scene.setScale(1); //this is line 920
                    scene.setPosition(0, 0);
            }
            else if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
            {
                    scene.setScaleY(1.6f);
                    scene.setScaleX(0.6f); 

                    scene.setPosition(120, -240);
            }
       }
       else if (MODE == 1)
       {
            if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
            {
                 scene.setScaleY(0.6f);
                 scene.setScaleX(1.6f);



                 scene.setPosition(-240, 120);
            }
            else if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
            {
                 scene.setScale(1);
                 scene.setPosition(0, 0);
            }
       }
    }

電話がオンになっている間はうまく機能しますが、電話が再起動されるとクラッシュが発生します

java.lang.NullPointerException
at org.example.example.examplelw.onConfigurationChanged(examplelw.java:920)
at android.app.ActivityThread.performConfigurationChanged(ActivityThread.java:3478)
at android.app.ActivityThread.handleConfigurationChanged(ActivityThread.java:3602)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4517)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
at dalvik.system.NativeStart.main(Native Method)

私の電話では、Nexus4とSamsungGalaxy S2は正常に動作し、電話を再起動してもクラッシュしませんが、他の一部のデバイスではクラッシュします。

これはLG-P990でも発生します。電話を再起動すると、向きの情報が表示されませんが、onConfigurationChangedが呼び出される理由がわかりません。

4

3 に答える 3

0

私が知っているように、問題はこれのオブジェクトシーンscene.setScale(1);がnullであるということです。null値を使用しているため、JavaはNULLPoinerExceptionをスローします。

このオブジェクトが初期化されるこの問題を解決するため。初期化されていないのでnullが含まれているので、アプリケーションのデバッグを使用してソリューションを取得すると思います。

シーンが作成される前にこのメソッドが呼び出されると、次のように実行できます。

if(scene == null) {
  // Initialize the scene object.
}

その後、残りのコード。

また

if(scene != null) {
    then rest of the code. 
}
于 2013-01-30T18:51:47.723 に答える
0

シーン オブジェクトを保存しようとしましたか? パーセル可能またはシリアライズ可能である場合は、 onSaveInstanceState() メソッドを使用して保存でき、 onCreate() で復元できます。詳細はこちら

于 2013-01-30T19:38:05.893 に答える
0

これでよろしいですか?

if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
            {
                if (scene == null)
                {
                    //do nothing
                }
                else
                    scene.setScale(1);
                    scene.setPosition(0, 0);
            }
于 2013-01-30T19:46:19.900 に答える