2011-12-31 5 views
0

ヘルプPlease Please!私は可能な限り効率的に動作するようにリストビューを取得しようとしていますが、NullPointerExceptionで強制終了します。ここに私のLogCatがあります。私は本当にそれを理解することはできません。私のリストビューのNULLポインタ例外

12-31 14:32:35.552: D/AndroidRuntime(240): Shutting down VM 
12-31 14:32:35.552: W/dalvikvm(240): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
12-31 14:32:35.552: E/AndroidRuntime(240): Uncaught handler: thread main exiting due to uncaught exception 
12-31 14:32:35.602: E/AndroidRuntime(240): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.cerealBarApps/com.cerealBarApps.FirstLoginActivity}: java.lang.NullPointerException 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.os.Looper.loop(Looper.java:123) 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.main(ActivityThread.java:4363) 
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.reflect.Method.invokeNative(Native Method) 
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.reflect.Method.invoke(Method.java:521) 
12-31 14:32:35.602: E/AndroidRuntime(240): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
12-31 14:32:35.602: E/AndroidRuntime(240): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
12-31 14:32:35.602: E/AndroidRuntime(240): at dalvik.system.NativeStart.main(Native Method) 
12-31 14:32:35.602: E/AndroidRuntime(240): Caused by: java.lang.NullPointerException 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.content.ContextWrapper.getResources(ContextWrapper.java:80) 
12-31 14:32:35.602: E/AndroidRuntime(240): at com.cerealBarApps.FirstLoginActivity.<init>(FirstLoginActivity.java:30) 
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.Class.newInstanceImpl(Native Method) 
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.Class.newInstance(Class.java:1479) 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409) 
12-31 14:32:35.602: E/AndroidRuntime(240): ... 11 more 
12-31 14:32:36.962: I/dalvikvm(240): threadid=7: reacting to signal 3 
12-31 14:32:37.192: I/dalvikvm(240): Wrote stack trace to '/data/anr/traces.txt' 
12-31 14:32:40.592: I/Process(240): Sending signal. PID: 240 SIG: 9 

これは私のリストビューコード

public class FirstLoginActivity extends ListActivity { 
    Context mContext; 
    List mList; 
    String[] testcontacts; 

    MessageView aa = null; 

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

     testcontacts = getResources() 
       .getStringArray(R.array.testcontacts_array); 

     aa = new MessageView(); 

     ListView lv = getListView(); 
     lv.setAdapter(aa); 
     lv.setTextFilterEnabled(true); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // When clicked, show a toast with the TextView text 
       Toast.makeText(getApplicationContext(), 
         ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
class MessageView extends ArrayAdapter<String> { 
     MessageView() { 
      super(FirstLoginActivity.this, android.R.layout.activity_list_item, 
        testcontacts); 
      // TODO Auto-generated constructor stub 
     } 

     public View getView(int position, View convertview, ViewGroup parent) { 
      Log.d("Ebz", "inside getView method"); 
      ViewHolder holder; 
      View v = convertview; 
      if (v == null) { 
       Log.d("Ebz", "if v == null"); 
       LayoutInflater inflater = getLayoutInflater(); 
       v = inflater.inflate(R.layout.list_items, null); 
       holder = new ViewHolder(); 
       holder.firstLine = (TextView) v.findViewById(R.id.firstLine); 
       holder.secondLine = (TextView) v.findViewById(R.id.secondLine); 
       holder.icon1 = (ImageView) v.findViewById(R.id.icon1); 
       holder.icon2 = (ImageView) v.findViewById(R.id.icon2); 
       v.setTag(holder); 
      } else { 
       holder = (ViewHolder) v.getTag(); 
      } 
      holder.firstLine.setText(testcontacts[position]); 
      holder.secondLine.setText(testcontacts[position]); 
      holder.icon1.setImageBitmap(null); 
      holder.icon2.setImageBitmap(null); 
      // call the images directly? 
      return v; 
     } 

     class ViewHolder { 
      TextView firstLine; 
      TextView secondLine; 
      ImageView icon1; 
      ImageView icon2; 

     } 
    } 
} 

私のXMLです:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     android:padding="6dip" > 

     <ImageView 
      android:id="@+id/icon1" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentTop="true" 
      android:layout_marginRight="6dip" 
      android:src="@drawable/ic_launcher" /> 

     <TextView 
      android:id="@+id/secondLine" 
      android:layout_width="fill_parent" 
      android:layout_height="26dip" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="true" 
      android:layout_toRightOf="@id/icon1" 
      android:ellipsize="marquee" 
      android:singleLine="true" 
      android:text="Some more information" /> 

     <TextView 
      android:id="@+id/firstLine" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_above="@id/secondLine" 
      android:layout_alignParentTop="true" 
      android:layout_alignWithParentIfMissing="true" 
      android:layout_toRightOf="@id/icon1" 
      android:gravity="center_vertical" 
      android:text="Some Information" /> 

     <ImageView 
      android:id="@+id/icon2" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:layout_marginRight="6dip" 
      android:src="@drawable/ic_launcher" /> 

    </RelativeLayout> 

答えて

3

あなたのコードはFirstLoginActivityオブジェクトのインスタンスの初期化で終端されます。 - それは早すぎる初期化シーケンス内のすべての活動の配線のためである

String[] testcontacts = getResources().getStringArray(
     R.array.testcontacts_array); 

移動onCreateハンドラの初期化、getResourcesは、おそらくその時点でnullを返して:

ほとんどの犯人は、このラインであります適所にある。

String[] testcontacts; 

... 

    // in onCreate 
    testcontacts = getResources().getStringArray(R.array.testcontacts_array); 

あなたが到達するときには、第二のNullPointerExceptionを打つ必要があります。

ListView lv = null; 
    lv.setAdapter(aa); 

を他の回答で指摘したように - あなたはfindViewByIdコールを逃しています。コードで

+0

実際は私の問題でしたが、listView lv = getListView();を設定するだけで大​​丈夫です。 私のリストビューは、XMLでカスタマイズされた方法を表示していません。なぜそれを理解しようとしていますが、なぜそれが私に多くの時間を節約するのかを教えてください。アドバンテージありがとう! XMLと更新コードを投稿しました –

+1

@EbenezerAckon:XMLやディスプレイに問題がある場合は、別の質問を投稿してください。これは元の問題とは関係ありません。 – Mat

+0

よろしくお願いいたします。そして私も同様に私の問題を理解した –

1

、次のコード行では、初期化時にnullにリストビューオブジェクトを設定している:

ListView lv = null; 

初期化のための罰金です。ただし、実際には、ビュー・オブジェクトのリストへの参照を取得したら、adapter..etcを設定するなどの他のすべての操作を行うことができ

lv = findViewById(R.layout.<yourlistviewid>); 

lvのオブジェクトを使用する前に、このような何かをやっている必要があります。その前に、nullpointer例外が発生します。

1

ここでListViewを初期化するのを忘れました。

以下のように初期化します。