0

私は漫画を表示し、後でアクセスできる「お気に入り」としてユーザーがマークできるようにする単純なアプリケーションを持っています(それ以上のことを行いますが、ここで関連するのはそれだけです)。ユーザーがコミックをお気に入りとしてマークすると、文字列が共有設定に配置され、フォーマットキー= "#of Comic" Value = "titleofComic"になります。SharedPreferencesには、お気に入りの漫画に関連付けられたキーと値のペアしか含まれていません。この機能は正常に機能します。この問題は、SharedPreferencesファイルに保存されているすべてのお気に入りの値を含むListViewを表示することを意図して実装したメニューボタンで発生します。これは、ユーザーがポップアップメニューの[お気に入り]ボタンをクリックしたときに実行されるアクションのコードです。

case R.id.favorites:
        Log.i("Step 1", "Favorites");
        favVector.clear(); //Clears string Vector that I want to use to hold the titles

        Map<String, ?> allprefs = xkfav.getAll(); //gets map of all Shared Preferences
        for (Map.Entry<String, ?> entry : allprefs.entrySet()) {
            favVector.add((String) entry.getValue());
        }
        Log.i("Step 2", "Favorites");
        setContentView(R.layout.favlist); //loads Layout with ListView (and nothing else)
        Log.i("Step 3", "Favorites");
        ListView menuList;
        menuList = (ListView) findViewById(R.id.FavListView);
        String[] items = new String[favVector.size()]; //creates array with size of Vector
        favVector.copyInto(items); //Copies Vector into array
        ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.fav_item, items);
        menuList.setAdapter(adapt); //Puts array contents into list

これを実行するたびに、フォースクローズが発生します。「ステップ2」がログに表示されることすらありません。これはおそらく美しくも効率的なコードでもないという事実を無視すると、ユーザーがこのボタンをクリックしたときに強制終了エラーが発生するのはなぜですか?

4

1 に答える 1

2

強制終了は通常、アプリのどこかで実行時例外が発生した結果です。

この例外はログに表示されます。Eclipse / ADTを使用している場合は、DDMSパースペクティブに移動し、logcatビューを確認します。(エラーは簡単に再現できると思います)。

スタックトレースが表示されます。スタックトレースを調べて、どこで問題が発生したかを見つけてください。これは、NullPointerExceptionから別のRuntimeExceptionまで何でもかまいません。

また、「ステップ1」ブレークポイントにブレークポイントを設定してみてください。アプリをデバッグモードで起動し、コードをステップ実行します。スタックのある時点で、アプリケーションが強制終了して終了するタイミングと理由が正確にわかります。

Eclipseのデバッグ機能を使用したことがない場合は、次のリンクを参照してください: http ://www.vogella.de/articles/EclipseDebugging/article.html

于 2011-01-02T19:02:03.223 に答える