String.xml에서
<string-array> 태그로 배열 만들어주고
소스코드는
public class phonelist extends Activity{
ListView list = (ListView)findViewById(R.id.list);
// ArrayAdapter<CharSequence> adapter ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.phonelist);
ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this, R.array.str_phone, android.R.layout.simple_list_item_1);
list.setAdapter(adapter);
list.setOnItemClickListener(listener);
}
private OnItemClickListener listener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> parentView, View v, int position, long id){
if(position == 0){
Toast.makeText(phonelist.this, "안녕", Toast.LENGTH_SHORT).show();
}
}
};
}
대충 이렇습니다
그런데 강제종료 현상이 일어나는데 왜이럴까요 ㅠㅠ?
로그도 올립니다
08-14 11:56:49.664: E/AndroidRuntime(469): FATAL EXCEPTION: main
08-14 11:56:49.664: E/AndroidRuntime(469): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.seedroid.samsung/com.seedroid.samsung.phonelist}: java.lang.NullPointerException
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-14 11:56:49.664: E/AndroidRuntime(469): at android.os.Handler.dispatchMessage(Handler.java:99)
08-14 11:56:49.664: E/AndroidRuntime(469): at android.os.Looper.loop(Looper.java:123)
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-14 11:56:49.664: E/AndroidRuntime(469): at java.lang.reflect.Method.invokeNative(Native Method)
08-14 11:56:49.664: E/AndroidRuntime(469): at java.lang.reflect.Method.invoke(Method.java:507)
08-14 11:56:49.664: E/AndroidRuntime(469): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-14 11:56:49.664: E/AndroidRuntime(469): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-14 11:56:49.664: E/AndroidRuntime(469): at dalvik.system.NativeStart.main(Native Method)
08-14 11:56:49.664: E/AndroidRuntime(469): Caused by: java.lang.NullPointerException
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.Activity.findViewById(Activity.java:1647)
08-14 11:56:49.664: E/AndroidRuntime(469): at com.seedroid.samsung.phonelist.<init>(phonelist.java:14)
08-14 11:56:49.664: E/AndroidRuntime(469): at java.lang.Class.newInstanceImpl(Native Method)
08-14 11:56:49.664: E/AndroidRuntime(469): at java.lang.Class.newInstance(Class.java:1409)
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
08-14 11:56:49.664: E/AndroidRuntime(469): ... 11 more
08-14 11:56:49.664: E/AndroidRuntime(469): Caused by: java.lang.NullPointerException
08-14 11:56:49.664: E/AndroidRuntime(469): at android.app.Activity.findViewById(Activity.java:1647)
아마도 layout에 해당 뷰가 존재하지 않아서 NullPointerException이 발생한 것 같습니다. layout xml 파일을 잘 확인해 보세요.
ListView list = (ListView)findViewById(R.id.list);
// ArrayAdapter<CharSequence> adapter ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.phonelist); //==> 요넘을 실행하고 나야 ListView를 찾을 수 있겠죠?
안드로이드가 XML파일에서 레이아웃을 읽어와서 뷰로 전환하기 전에 리스트뷰를 찾았기 때문에 Null이 떨어진 듯 합니다.