Android Newbie質問ArrayAdapter.SetAdapterのポインター
-
30-09-2019 - |
質問
私は学習を遅くし、最初のAndroidアプリを構築しています。私はJavaに非常に新しいですが、すでにC#、VB.NET(当時)、Objective-C(ストアに6つのアプリがあります)、Fortran(waaaaaaaaaaaaaaaaaaaaaay;)でいくつかのプロジェクトを行っています。
だから私は海外から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);
ヌルポインターの例外を教えてください。
Macの下でEclipseを使用しています。ログキャットウィンドウがスローします。
06-25 18:41:37.842:ERROR/AndroidRuntime(9523):無作法なハンドラー:猛攻撃の例外によるスレッドメイン終了
06-25 18:41:37.891:エラー/Androidruntime(9523):java.lang.runtimeexception:アクティビティComponentInfo {com.davidhomes.steel/com.davidhomes.steel.mainact}:Java.lang.nullpoeinterexcept
06-25 18:41:37.891:error/androidruntime(9523):at 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:error/androidruntime(9523):at android.app.activitythread.access $ 2200(ActivityThread.java:126)
06-25 18:41:37.891:error/androidruntime(9523):at android.app.activitythread $ h.handlemessage(ActivityThread.java:1932)
06-25 18:41:37.891:エラー/Androidruntime(9523):at android.os.handler.dispatchmessage(handler.java:99)
06-25 18:41:37.891:error/androidruntime(9523):at android.os.looper.loop(looper.java:123)
06-25 18:41:37.891:error/androidruntime(9523):at android.app.activitythread.main(ActivityThread.java:4595)
06-25 18:41:37.891:error/androidruntime(9523):at java.lang.reflt.method.invokenative(native method)
06-25 18:41:37.891:error/androidruntime(9523):at java.lang.reflt.method.invoke(method.java:521)
06-25 18:41:37.891:error/androidruntime(9523):at com.android.internal.os.zygoteinit $ methodandargscaller.run(zygoteinit.java:860)
06-25 18:41:37.891:error/androidruntime(9523):at com.android.internal.os.zygoteinit.main(zygoteinit.java:618)
06-25 18:41:37.891:error/androidruntime(9523):at dalvik.system.nativestart.main(ネイティブメソッド)
06-25 18:41:37.891:error/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:error/androidruntime(9523):at android.app.instrumentation.callactivityoncreate(instrumentation.java:1047)
06-25 18:41:37.891:error/androidruntime(9523):at android.app.activitythread.performlaunchactivity(Activitythread.java:2544)
06-25 18:41:37.891:エラー/Androidruntime(9523):... 11
06-25 18:46:38.252:エラー/ActivityManager(99):TOPアプリの変更を設定できません!
183行目は最初のセタアダプター呼び出し(designations.setadapter(adaptershapes);)です。コメントすると、2番目のセタダプターは1つの壊れたコードです
私はここで少し紛失しています。アダプターは、シミュレーターとデバイスから実行するときにログウィンドウに適切な数のアイテムを示しています。
私はJavaとAndroidの両方にとって初心者であることを認めているので、どんな助けも高く評価されています。
よろしく
デビッド
解決 2
おっと!それはずっと私のせいでしたが、どういうわけか私は2つのレイアウト(1つは異なる解像度用)があり、私のデバイスで使用されているものは適切なリストビューとスピナーIDを持っていませんでした。その代替レイアウトはフォルダーに崩壊し、私はそれを忘れていました(実際にテストするデバイスを手に入れるまで、約2か月間アプリの開発を一時停止しました)。
正常に動作するのはシミュレータにインストールされていましたが、デバイスにはなく、その逆も同様であり、良いものが私のデバイスの解像度に一致するので奇妙です(私もそこに何かが欠けていると確信していますが、それは今は重要ではありません)
それでも、ChrisがFindViewByidのヌルリターン値を見てくれてありがとう。 Androidに慣れていないので、私は始めるように失われました
よろしくデイビッド
他のヒント
まあ、あなたがおそらく自分自身を理解したように、いくつかの変数はnullです。残念ながら、コードにnullpointerexceptionの明らかなソースはありません。
したがって、まず、どの変数がnullであるかを特定するために、したがって例外を引き起こす必要があります。
例えば、 FindViewByID ビューが見つからない場合はnullを返しますので、再確認することができます ListView
と Spinner
適切に初期化されています。
もちろん、問題はあなたにあるかもしれません ArrayAdapter
S、そのため、それらを確認する必要がありますが、質問から、すでにそれを行っているかのように聞こえます。
nullpointerexceptionがどこで発生しているかを正確に知る(そして私たち)が、より具体的なアドバイスを提供する方が簡単になるでしょう
私はこれが長く閉じた主題であることを知っています。しかし、私は同じ問題に出会ったばかりで、この投稿はそれに答えませんでした。
私がしたことはとてもばかげていた。 XMLへの参照を追加するのを忘れました。すなわち。 SetContentView(R.Layout.Settings);
実際、元の投稿もこれを忘れてしまったように見えますので、私はそれを投稿するだけだと思いました。乾杯。
同じ問題がありました。すべてのオブジェクトを印刷することにlog.dメッセージを配置します。私のlistViewオブジェクトは「null」であることが判明しました。その理由は、私のsetContentViewに間違ったXMLアクティビティがリストされているためです。この問題をデバッグする最も簡単な方法は、「null」であるオブジェクト/変数が見つかるまでlog.dメッセージを入れ続けることだと思います。