2

私は最初の Android アプリの学習と構築を遅らせてきました。私は Java を初めて使用しますが、C#、VB.NET (当時)、Objective-C (ストアに 6 つのアプリがあります)、および Fortran (昔は waaaaaaaaaaaaaaaaaaaay ;) でいくつかのプロジェクトを既に実行しています。

それで、海外からhtcの伝説(私は米国にいません)を受け取りました。これは、開発用の適切な中間レベルのデバイスを用意するために購入しました(ルート化されていないadnroid 2.1を実行しています)。

私が開発しているアプリケーションは、ターゲット レベル 4 (android 1.6) です。拡張子が .mp3 の 5 Mb の sqlite3 データベースを使用して、apk 内の圧縮を回避し、アセットからシステム フォルダーに適切にコピーします。

エミュレーターではすべて正常に動作し、デバイスでは、データベースをコピーした後のアプリのファイル サイズが、エミュレーターで表示されるものと正確に一致することがわかります。

現在、リスト ビューとスピナーを使用したメイン アクティビティで、2 つの配列アダプターを介していくつかのデータをバインドしています。デバイス上で実行すると、すべてがスムーズに実行されます。ただし、デバイスで実行しようとすると、コードのこの部分:

public class mainAct extends Activity implements OnItemSelectedListener, TextWatcher, OnItemClickListener
{   
        /** members */
        //private EditText searchtext;
        private ListView designations;
        private ArrayAdapter<String> adapterShapes;
        private ArrayAdapter<String> adapterTypes;
        private Spinner types;
      .  
      .  
      .    
    public void onCreate(Bundle savedInstanceState)   
    {  
      .  
      .  
      .    
        // DESIGNATIONS  
        // 
        adapterShapes = new ArrayAdapter<String>(this,R.layout.list_item,shapes);       // custom TextView Adapter  
        designations=(ListView)findViewById(R.id.designations);
        Log.e("MAIN.ACCT", "ok to 172");
        designations.setAdapter(adapterShapes);
        Log.e("MAIN.ACCT", "ok to 174");
        designations.setOnItemClickListener(this);

        // TYPES
        //
        adapterTypes=new ArrayAdapter<String>(this,R.layout.spinner_item,DT.get().typesInLibrary);
        types=(Spinner)findViewById(R.id.types);
        types.setAdapter(adapterTypes);
        types.setOnItemSelectedListener(this);
      .  
      .  
      .  
    }
}

両方の指定.setAdapter(adapterShapes);
& types.setAdapter(adapterTypes);

Null Pointer の例外を教えてください。

私はMacでEclipseを使用しています.LogCatウィンドウはスローします:

06-25 18:41:37.842: エラー/AndroidRuntime(9523): キャッチされていないハンドラー: キャッチされていない例外が原因でスレッド メインが終了しました

06-25 18:41:37.891: エラー/AndroidRuntime(9523): java.lang.RuntimeException: アクティビティ ComponentInfo{com.davidhomes.steel/com.davidhomes.steel.mainAct} を開始できません: java.lang.NullPointerException

06-25 18:41:37.891: エラー/AndroidRuntime (9523): android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2596) で

06-25 18:41:37.891: エラー/AndroidRuntime(9523): で

Android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)

06-25 18:41:37.891: エラー/AndroidRuntime (9523): android.app.ActivityThread.access$2200 (ActivityThread.java:126) で

06-25 18:41:37.891: エラー/AndroidRuntime (9523): android.app.ActivityThread$H.handleMessage (ActivityThread.java:1932) で

06-25 18:41:37.891: エラー/AndroidRuntime (9523): android.os.Handler.dispatchMessage (Handler.java:99) で

06-25 18:41:37.891: エラー/AndroidRuntime(9523): android.os.Looper.loop(Looper.java:123) で

06-25 18:41:37.891: エラー/AndroidRuntime (9523): android.app.ActivityThread.main (ActivityThread.java:4595) で

06-25 18:41:37.891: エラー/AndroidRuntime(9523): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で

06-25 18:41:37.891: エラー/AndroidRuntime(9523): java.lang.reflect.Method.invoke(Method.java:521) で

06-25 18:41:37.891: エラー/AndroidRuntime (9523): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:860) で

06-25 18:41:37.891: エラー/AndroidRuntime (9523): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) で

06-25 18:41:37.891: エラー/AndroidRuntime (9523): dalvik.system.NativeStart.main (ネイティブ メソッド) で

06-25 18:41:37.891: エラー/AndroidRuntime(9523): 原因: java.lang.NullPointerException


-------------------------------------------------- ------------ 06-25 18:41:37.891: エラー/AndroidRuntime (9523): com.davidhomes.steel.mainAct.onCreate (mainAct.java:183) で

-------------------------------------------------- ------------

06-25 18:41:37.891: エラー/AndroidRuntime (9523): android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) で

06-25 18:41:37.891: エラー/AndroidRuntime (9523): android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2544) で

06-25 18:41:37.891: エラー/AndroidRuntime(9523): ... 11 詳細

06-25 18:46:38.252: エラー/ActivityManager(99): トップ アプリの設定に失敗しました!

183 行目は最初の setAdapter 呼び出し (designations.setAdapter(adapterShapes);) です。コメント アウトすると、2 番目の setAdapter がコードを壊すコードになります。

ここで少し迷っています。アダプターは、シミュレーターとデバイスから実行すると、ログ ウィンドウに適切な数のアイテムを表示します。

私はJavaとAndroidの両方の初心者であることを認めているので、どんな助けも大歓迎です。

よろしく
デビッド

4

4 に答える 4

4

おそらくご存じのとおり、一部の変数は null です。残念ながら、あなたのコードには NullPointerException の明らかな原因はありません。

したがって、最初にどの変数が null で、それによって例外が発生したかを特定する必要があります。

たとえば、ビューが見つからない場合、 findViewByIdListViewは null を返すため、正しく初期化されてSpinnerいることを再確認する必要があります。

もちろん、問題はあなたArrayAdapterの s にある可能性があるので、それらも確認する必要がありますが、あなたの質問からは、すでにそれを行っているように聞こえます。

NullPointerException が発生している場所を正確に把握できれば、より具体的なアドバイスを提供しやすくなります。

于 2010-06-26T00:18:39.050 に答える
3

おっとっと!それはずっと私のせいでした.どういうわけか私は2つのレイアウト(異なる解像度用のもの)を持っていました.私のデバイスで使用されているものには適切なListViewとSpinner IDがありませんでした. その代替レイアウトはフォルダーに折りたたまれていましたが、それを忘れていました (実際にテストするデバイスを入手するまで、約 2 か月間アプリの開発を一時停止していました)。

正常に機能していたのはシミュレーターにインストールされていましたが、デバイスにはインストールされていませんでした。また、その逆も同様で、良いものが私のデバイスの解像度と一致するため奇妙です (私はそこに何かが欠けていると確信していますが、それは今は重要ではありません)

それでも、findViewById の Null 戻り値を確認するように指摘してくれた Chris に感謝します。アンドロイドに慣れていないので、始めるべきか迷っていました

よろしくデビッド

于 2010-07-07T14:21:31.463 に答える
1

私はこれが長い間閉じられた主題であることを知っています。しかし、私は同じ問題に遭遇したばかりで、この投稿はそれに答えませんでした。

私がしたことは、とてもばかげたことでした。xmlへの参照を追加するのを忘れました。すなわち。setContentView(R.layout.settings);

実は元の投稿もこれを忘れてしまったようですので、投稿したいと思いました。乾杯。

于 2012-04-30T13:17:41.690 に答える
1

私も同じ問題を抱えていました。Log.d メッセージをすべてのオブジェクトの出力に入れました。私の ListView オブジェクトが「null」であることが判明しました。これは、SetContentView に間違った XML アクティビティがリストされていたためです。この問題をデバッグする最も簡単な方法は、「null」のオブジェクト/変数が見つかるまで Log.d メッセージを入力し続けることだと思います。

于 2013-12-10T16:48:30.860 に答える