2013-10-03 4 views
0

У меня есть следующий код, который получает запущен в качестве второй деятельности:NullPointer исключения при использовании ListView

public class SensorActivity extends Activity implements SensorEventListener{ 

List<Sensor> sensors; 
Sensor selectedSens; 
SensorManager SensMng; 
ArrayAdapter<String> adapter; 

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sensor); 

    final ListView listSensors = (ListView) findViewById(R.id.listvalues); 


    SensMng = (SensorManager) getSystemService(SENSOR_SERVICE); 
    sensors = SensMng.getSensorList(Sensor.TYPE_ALL); 
    ArrayAdapter<Sensor> adapter = new ArrayAdapter<Sensor>(this, android.R.layout.simple_list_item_1, sensors); 
    listSensors.setAdapter(adapter); 



} 

Вот мой XML-файл:

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/listvalues" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /> 

Я продолжаю получать исключение NullPointer:

10-03 21:46:57.475: E/AndroidRuntime(9893): FATAL EXCEPTION: main 
10-03 21:46:57.475: E/AndroidRuntime(9893): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ch.ethz.inf.vs.android.spurra.sensors/ch.ethz.inf.vs.android.spurra.sensors.SensorActivity}: java.lang.NullPointerException 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2024) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.app.ActivityThread.access$600(ActivityThread.java:140) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.os.Looper.loop(Looper.java:137) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.app.ActivityThread.main(ActivityThread.java:4898) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at dalvik.system.NativeStart.main(Native Method) 
10-03 21:46:57.475: E/AndroidRuntime(9893): **Caused by**: java.lang.NullPointerException 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.app.Activity.findViewById(Activity.java:1882) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at ch.ethz.inf.vs.android.spurra.sensors.SensorActivity.<init>(SensorActivity.java:24) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at java.lang.Class.newInstanceImpl(Native Method) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at java.lang.Class.newInstance(Class.java:1319) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.app.Instrumentation.newActivity(Instrumentation.java:1057) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2015) 
10-03 21:46:57.475: E/AndroidRuntime(9893):  ... 11 more 

Все, что я сделал, было действительно просто копией прошлого из моего основного вида деятельности, а также корректировкой значений. Основная деятельность работает без проблем, но этого нет. Я пробовал очистить, перестроить проект, но безрезультатно.

Может кто-нибудь, пожалуйста, скажите мне, что случилось?

Спасибо, С уважением

+0

при вызове адаптера arraylist попытайтесь добавить android.R.id.text1, он должен следовать после макета –

+0

Просьба отправить всю трассировку стека. – Simon

+0

Как получить трассировку стека? Извините, я новичок в этом. – spurra

ответ

1

Я объявил «окончательный список ListViewVals = (ListView) findViewById (R.id.listvalues);» как поле, поэтому перед запуском setContentView(). Как только я переместил его в фактическую функцию, он сработал. Поэтому я предполагаю, что это заставило его вернуть нуль?

Да. Если вы звоните findViewById(R.id.someId);, прежде чем звонить setContentView(R.layout.someLayout);, он будет return null, потому что вы еще не надули свой layout, который содержит View id, который вы пытаетесь найти.

В принципе, ваш Views существует внутри вашей layout так, если вы пытаетесь использовать findViwById(), прежде чем надуть layout (обычно с setContentView()), то нет ничего найти. Таким образом, вы получите NPE при попытке использовать, например, при вызове функции на нем.

0

Если ваш проект имеет внешние банку файлы, перейдите в Проект-> свойства-> заказ и экспорт и выберите весь внешний опарник. Это должно делать работу.

Смежные вопросы