2012-07-05 94 views
1

我設計了一個android應用程序,我想在啓動畫面後查看菜單。我正確觸發它,並使用ArrayAdapter創建自定義ListView。但是,當我運行該模塊時,它會在splash和logcat指示NullPointerException後關閉。但是,正如我所說,我沒有做任何錯事。請幫助我! :)從findViewById使用視圖時出現NullPointerException

謝謝。

代碼:

package com.sliit.droidman.main; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.sliit.droidman.R; 

public class MainActivity extends Activity implements OnItemClickListener{ 

ArrayList<String> Methods = new ArrayList<String>(); 
ArrayList<String> MethodDiscription = new ArrayList<String>(); 
ArrayList<Integer> Icons = new ArrayList<Integer>(); 
ArrayList<Object> Objects = new ArrayList<Object>(); 

private ListItemAdapter adapter; 
ListView lv; 

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
    Toast.makeText(
      this, 
      "Title => " + Methods.get(position) + "=> n Description" 
        + MethodDiscription.get(position), Toast.LENGTH_SHORT).show(); 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_menu); 

    lv = (ListView) findViewById(R.layout.main_menu); 
    fillArrayList(); 
    lv.setOnItemClickListener(this); 

} 

public void RefreshListView() { 
    Objects.clear(); 
    for (int i = 0; i < Methods.size(); i++) { 
     Object obj = new Object(); 
     Objects.add(obj); 
    } 
    Log.d("object array", "" + Objects.size()); 
    adapter = new ListItemAdapter(Objects, 1); 
    lv.setAdapter(adapter); 
} 

private class ListItemAdapter extends ArrayAdapter<Object>{ 
    ViewHolder HolderView; 

    public ListItemAdapter(List<Object> Item, int ID) { 
     super(MainActivity.this, R.layout.listitem_row , Item); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflator = getLayoutInflater(); 
     convertView = inflator.inflate(R.layout.listitem_row, null); 

     HolderView = new ViewHolder(); 
     HolderView.AppEvent = (TextView) convertView.findViewById(R.id.Event); 
     HolderView.EventDisc = (TextView) convertView.findViewById(R.id.EventDescription); 
     HolderView.iv = (ImageView) convertView.findViewById(R.id.avatar); 

     convertView.setTag(HolderView); 

     HolderView.AppEvent.setText(Methods.get(position)); 
     HolderView.EventDisc.setText(MethodDiscription.get(position)); 
     HolderView.iv.setBackgroundResource(Icons.get(position)); 

     return convertView; 
    } 

    private class ViewHolder { 
     TextView AppEvent; 
     TextView EventDisc; 
     ImageView iv; 

    } 
} 

public void fillArrayList() { 
    Methods.clear(); 
    MethodDiscription.clear(); 
    Icons.clear(); 

    Methods.add(0,"Applications"); 
    Methods.add(1,"System Resources"); 
    Methods.add(2,"Statistics"); 
    Methods.add(3,"Threats"); 

    MethodDiscription.add(0, "bla bla bla"); 
    MethodDiscription.add(1, "bla bla bla"); 
    MethodDiscription.add(2, "bla bla bla"); 
    MethodDiscription.add(3, "bla bla bla"); 

    Icons.add(0, R.drawable.ic_launcher); 
    Icons.add(1, R.drawable.ic_launcher); 
    Icons.add(2, R.drawable.ic_launcher); 
    Icons.add(3, R.drawable.ic_launcher); 
} 

} 

從發生錯誤的地方的logcat的:

07-05 01:44:50.678: W/dalvikvm(1907): threadid=1: thread exiting with uncaught    exception (group=0x40a13300) 
07-05 01:44:50.728: E/AndroidRuntime(1907): FATAL EXCEPTION: main 
07-05 01:44:50.728: E/AndroidRuntime(1907): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sliit.droidman/com.sliit.droidman.main.MainActivity}:   java.lang.NullPointerException 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.os.Looper.loop(Looper.java:137) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at dalvik.system.NativeStart.main(Native Method) 
07-05 01:44:50.728: E/AndroidRuntime(1907): Caused by: java.lang.NullPointerException 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at com.sliit.droidman.main.MainActivity.onCreate(MainActivity.java:47) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.app.Activity.performCreate(Activity.java:5008) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
07-05 01:44:50.728: E/AndroidRuntime(1907):  ... 11 more 
+4

請發表您的LogCat請。 – Nerd 2012-07-05 16:52:50

+0

這是一段糟糕的代碼。 – pawelzieba 2012-07-05 16:55:53

+0

你能告訴我哪個是壞代碼! – 2012-07-05 16:56:36

回答

5

lv變量將是null因爲你不尋找它的ID,所以不是作者:

lv = (ListView) findViewById(R.layout.main_menu); 

你應該搜索的ListView的ID:

lv = (ListView) findViewById(R.id.the_id_of_the_listview); 
+0

我得到了正確的BT,現在菜單項不顯示!我已經根據需要指導了數據列表! – 2012-07-05 16:58:43

+1

@DimalChandrasiri我不知道你在看什麼,但是你設置適配器的唯一地方是在'RefreshListView'方法中,並且你沒有從代碼中的任何地方調用該方法,所以你不會看到你的'ListView'中的任何元素。 – Luksprog 2012-07-05 17:03:03

+0

hehehe!好吧,那是我該死的錯誤!我以爲我在fillArraylist()之後調用它,bt我從來沒有! :)現在它工作正常!謝謝大家! :)欣賞它! – 2012-07-05 17:08:31

相關問題