2013-07-20 5 views
1

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

 for (int i = 0; i < z; i++) { 
      LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View v = vi.inflate(R.layout.tag_table_row, null); //this is the template for each view 

      // set xyz dynamically 
      TextView textView = (TextView) v.findViewById(R.id.xyz); //id within the layout 
      textView.setText(xyz[i]); 
      //set score dynamically 
      TextView textView2 = (TextView) v.findViewById(R.id.score); 
      textView2.setText(scores[i]); 
      //set bar graph dynamically 
      TagBar tagBar = (TagBar) findViewById(R.id.tagbar); 
      double tag1score = Double.parseDouble(scores[i]); 
      Log.i("score", scores[i]); 
      double factor = 250; 
      double len = tag1score*factor; 
      int length = (int) len; 
      Log.i("length", Integer.toString(length)); 
      tagBar.setBarLength(length);     

      // insert into main view 
      View insertPoint = findViewById(R.id.tagTable); 
      ((ViewGroup) insertPoint).addView(v, i, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 
     } 

TagBar класс я создал, что в основном рисует горизонтальную полосу длиной, которая определяется "Гол". Весь этот код работает нормально, за исключением строки tagBar.setBarLength(length);. Когда эта строка работает, я получаю NullPointerException, и приложение выходит из строя.

Насколько я знаю, length определен и не равно нулю, tagBar определен и не равно нулю, а метод setBarLength() определяется в TagBar классе. Почему я получаю NullPointerException`?

setBarLength() определяется в TagBar класс следующим образом:

public void setBarLength(int n) { 
    barLeng = n; 
    invalidate(); 
    requestLayout(); 
} 

Вот мой Logcat:

07-20 12:33:52.029: E/AndroidRuntime(8075): FATAL EXCEPTION: main 
07-20 12:33:52.029: E/AndroidRuntime(8075): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tforan.blobtag4/com.tforan.blobtag4.PlaceActivity}: java.lang.NullPointerException 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1852) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1873) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.os.Looper.loop(Looper.java:150) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.app.ActivityThread.main(ActivityThread.java:4358) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at dalvik.system.NativeStart.main(Native Method) 
07-20 12:33:52.029: E/AndroidRuntime(8075): Caused by: java.lang.NullPointerException 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at com.tforan.blobtag4.PlaceActivity.onCreate(PlaceActivity.java:169) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816) 
07-20 12:33:52.029: E/AndroidRuntime(8075):  ... 11 more 

Любая помощь будет принята с благодарностью. Благодаря!

+1

Не могли бы вы добавить больше своего кода? Возможно, весь ваш метод onCreate. Это происходит внутри onCreate, но ваш оператор for не содержит достаточно кода для отладки проблемы. – Gatekeeper

ответ

4

Исключение нулевого указателя генерируется при разыменовании нулевого указателя - когда что-то слева. нулевой. Таким образом, единственное, что может вызвать это, - это тегаб, равный нулю, если у вас есть правильная линия. Я бы удостоверился, что идентификатор, который вы ищете, на самом деле находится в вашем xml. Если это действительно так, я запускаю его под отладчиком.

Редактировать: вы хотите найти тегбар в представлении активности, а не в представлении, которое вы надуваете в цикле? Вероятно, это ошибка. Все остальные находки - v.findViewById, это только findViewById.

+0

+1 Очень хорошее объяснение. –

+0

большой улов. это именно то, что было. изменено на "TagBar tagBar = (TagBar) v.findViewById (R.id.tagbar);" и это сработало. большое спасибо! – user2163853

+0

Я соглашусь через семь минут, когда это позволит мне. – user2163853

2

проверка здесьTagBar tagBar = (TagBar) findViewById(R.id.tagbar);

вы получаете java.lang.NullPointerException

, потому что ваш tagBar объект является недействительным!

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