1

私は初めての Android アプリを開発しています (Visual Basic などの他のシステムで開発した経験があります)。

奇妙なエラーが発生します。Java アクティビティ クラスで onCreate の後に onStart メソッドを使用すると、アクティビティが開始時にすぐにクラッシュします。onStart がなくてもすべて正常に動作します (onCreate のみ)。onStart の代わりに onRestart を配置した場合も同じです。

これは、似ていないメインとヘルプの 2 つの異なるアクティビティで発生します。onStart (onRestart) を使用する必要がある理由:

  • MainActivity では、レイアウトが表示されるたびに、最初の読み込み時と他のアクティビティから戻った後にレイアウトをフェードインしたいと考えています。

  • HelpActivity は、同じフレーム (ScrollView) 内のヘルプ ページで追加の子ビューを拡張しますが、デバイスの回転時に、最初は onCreate のフレームに設定されたヘルプ TOC に戻ります。それはユーザーが望むものではありません。

コードと Logcat が適用されます。

古い電子書籍リーダー Pocketbook iq 701 を Android 2.0.1 (USB 経由で接続) とサードパーティ製エミュレーター YouVawe で使用していますが、両方でエラーが表示されます。

誰かが同じ問題に直面したことがある場合は、これが Android のバグなのか、それとも何か間違っているのか教えてください。たぶん私はそれを過労する可能性がありますが、docs blablabla による従来の方法は、より好ましく、より便利です。

事前にサンクス!

主な活動:

public class MainActivity extends Activity {

    public Animation fadeIn;
    public View mainView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        mainView=(View)findViewById(R.id.linearLayoutMain);
        mainView.setVisibility(View.INVISIBLE);   //to fadein later

        //fade-in animation to use on activity (re)start
        fadeIn = AnimationUtils.loadAnimation(this, R.anim.fadein);
    }

    @Override
    protected void onStart() {
        super.onStart();

        mainView.setVisibility(View.INVISIBLE);
        mainView.startAnimation(fadeIn);
        mainView.setVisibility(View.VISIBLE);
    }

ヘルプ活動:

public class HelpActivity extends Activity {

    public LinearLayout layoutHelpFrame;
    public View viewHelpPage;
    public LayoutInflater inflater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_help);

        //frame to display help content
        layoutHelpFrame = (LinearLayout)findViewById(R.id.frameHelp);

        //load initially the Help TOC
        inflater = getLayoutInflater();
        viewHelpPage=inflater.inflate(R.layout.help_0, null);
//if no onStart or if onRestart used, add view here:
//      layoutHelpFrame.addView(viewHelpPage);
    }

    @Override
    protected void onStart() {
        super.onStart();
        //when restarted on orientation change, help page is restored
        layoutHelpFrame.addView(viewHelpPage);
    }

    //on click topic links
    public void showHelpTopic(View topiclnk) {

        //clear view
        layoutHelpFrame.removeView(viewHelpPage);   

        //get corresponding topic Id by link textview Id
        String lnkname=getResources().getResourceEntryName(topiclnk.getId()); 
        String topicN=lnkname.substring(lnkname.length()-1); //1 last char (digit)
        int layoutID = MainActivity.getResId("help_"+topicN, R.layout.class);

        //load the Help topic into frame
        viewHelpPage=inflater.inflate(layoutID, null);
        layoutHelpFrame.addView(viewHelpPage);
        layoutHelpFrame.scrollTo(0, 0);
    }

LogCat (クラッシュの瞬間から):

03-20 06:19:18.136: D/AndroidRuntime(10243): Shutting down VM
03-20 06:19:18.136: W/dalvikvm(10243): threadid=3: thread exiting with uncaught exception (group=0x4001b180)
03-20 06:19:18.136: E/AndroidRuntime(10243): Uncaught handler: thread main exiting due to uncaught exception
03-20 06:19:18.146: E/AndroidRuntime(10243): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.a_z_b_u_k_a.ourabc/ru.a_z_b_u_k_a.ourabc.HelpActivity}: java.lang.ClassCastException: android.widget.ScrollView
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2484)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1835)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.os.Looper.loop(Looper.java:123)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.app.ActivityThread.main(ActivityThread.java:4325)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at java.lang.reflect.Method.invokeNative(Native Method)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at java.lang.reflect.Method.invoke(Method.java:521)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at dalvik.system.NativeStart.main(Native Method)
03-20 06:19:18.146: E/AndroidRuntime(10243): Caused by: java.lang.ClassCastException: android.widget.ScrollView
03-20 06:19:18.146: E/AndroidRuntime(10243):    at ru.a_z_b_u_k_a.ourabc.HelpActivity.onCreate(HelpActivity.java:25)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-20 06:19:18.146: E/AndroidRuntime(10243):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2431)
03-20 06:19:18.146: E/AndroidRuntime(10243):    ... 11 more
03-20 06:19:18.156: I/dalvikvm(10243): threadid=7: reacting to signal 3
03-20 06:19:18.156: E/dalvikvm(10243): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
03-20 06:19:57.116: D/AndroidRuntime(10322): Shutting down VM
03-20 06:19:57.116: W/dalvikvm(10322): threadid=3: thread exiting with uncaught exception (group=0x4001b180)
03-20 06:19:57.116: E/AndroidRuntime(10322): Uncaught handler: thread main exiting due to uncaught exception
03-20 06:19:57.126: E/AndroidRuntime(10322): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.a_z_b_u_k_a.ourabc/ru.a_z_b_u_k_a.ourabc.MainActivity}: java.lang.NullPointerException
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2484)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1835)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.os.Looper.loop(Looper.java:123)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.app.ActivityThread.main(ActivityThread.java:4325)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at java.lang.reflect.Method.invokeNative(Native Method)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at java.lang.reflect.Method.invoke(Method.java:521)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at dalvik.system.NativeStart.main(Native Method)
03-20 06:19:57.126: E/AndroidRuntime(10322): Caused by: java.lang.NullPointerException
03-20 06:19:57.126: E/AndroidRuntime(10322):    at ru.a_z_b_u_k_a.ourabc.MainActivity.onCreate(MainActivity.java:44)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-20 06:19:57.126: E/AndroidRuntime(10322):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2431)
03-20 06:19:57.126: E/AndroidRuntime(10322):    ... 11 more
03-20 06:19:57.136: I/dalvikvm(10322): threadid=7: reacting to signal 3
03-20 06:19:57.136: E/dalvikvm(10322): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
4

1 に答える 1

3

layoutHelpFrame は、同時に scrollview と linearLayout にすることはできません。IDなどを混同したに違いありません。

scrollview と linearLayout に別の ID を付けて、それらを適切に呼び出すと、機能するはずです。

于 2014-03-20T06:38:54.803 に答える