Я столкнулся с ошибкой, которую я не могу понять для жизни меня. У меня есть слушатель, который вызывает вызов webservice и заполняет статические arraylists из двух других классов practiceRoundListActivity и qualifierRoundListActivity. Итак, в коде ниже, в цикле foreach у меня есть два условия, которые определяют, какой arraylist событие будет вставлено. Первое условие «praciticeRoundListActivity.values ...» отлично работает, но вызов «qualifierRoundListActivity.values ...» не работает, и я получаю исключение с нулевым указателем.Исключение null-указателя Android при доступе к статическому arraylist
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if (arg2 != 0) {
String name = (String) arg0.getItemAtPosition(arg2);
Log.d(TAG, name);
Team team = SpectatorActivity.map2.get(name);
Log.d(TAG, team.getGSID());
String url = "http://qualifiers.golfstat.com/webservices/remote.cfc?method=getEventsByGSID&GSID=";
url += team.getGSID();
wt.execute(url, team);
//practiceRoundListActivity.values = new ArrayList<String>();
//qualifierRoundListActivity.values2 = new ArrayList<String>();
for(Event event : team.getEvents()) {
if(event.getType() == 'p') {
Log.d(TAG, "PR found");
practiceRoundListActivity.values.add(event.getEventDescription() + " " + event.getTournamentDescription());
} else if(event.getType() == 'q') {
Log.d(TAG, "QR found");
// //HERE IS THE BUG qualifierRoundListActivity.values.add(event.getEventDescription() + " " + event.getTournamentDescription());
}
}
tabHost.setCurrentTab(1);
tabHost.setVisibility(0);
}
}
Будучи список мероприятий, practiceRoundListActivity и qualifierRoundListActivity прикреплены к arrayadapter, который будет отображаться. Я исчерпал каждую идею, чтобы что-то узнать, что-то о том, почему это происходит. Совсем недавно, поскольку practiceRound ... и qualifierRound ... настолько похожи, я скопировал код для практикиRound ... class в qualifierRound ... и изменил все необходимые имена на quailifierRound ... (Я знаю, что эти имена классов досадно длинный). Спасибо заранее за любую помощь.
public class qualifierRoundListActivity extends ListActivity {
static ListView listView;
ArrayAdapter<String> adapter;
public static ArrayList<String> values;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.round_list);
listView = getListView();
values = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Intent intent = new Intent(getApplicationContext(), LeaderBoardActivity.class);
startActivity(intent);
}
});
}
public static void setMultipleChoice() {
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
@Override
public void onPause() {
super.onPause();
listView.setOnItemLongClickListener(null);
}
}
Logcat: Линия 154 является "qlualifierRoundListActivity.values.add (..." линия
03-20 23:05:59.272: E/AndroidRuntime(2392): FATAL EXCEPTION: main
03-20 23:05:59.272: E/AndroidRuntime(2392): java.lang.NullPointerException
03-20 23:05:59.272: E/AndroidRuntime(2392): at com.gstat.activities.SpectatorActivity.onItemSelected(SpectatorActivity.java:154)
03-20 23:05:59.272: E/AndroidRuntime(2392): at android.widget.AdapterView.fireOnSelected(AdapterView.java:871)
03-20 23:05:59.272: E/AndroidRuntime(2392): at android.widget.AdapterView.access$200(AdapterView.java:42)
03-20 23:05:59.272: E/AndroidRuntime(2392): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:837)
03-20 23:05:59.272: E/AndroidRuntime(2392): at android.os.Handler.handleCallback(Handler.java:587)
03-20 23:05:59.272: E/AndroidRuntime(2392): at android.os.Handler.dispatchMessage(Handler.java:92)
03-20 23:05:59.272: E/AndroidRuntime(2392): at android.os.Looper.loop(Looper.java:123)
03-20 23:05:59.272: E/AndroidRuntime(2392): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-20 23:05:59.272: E/AndroidRuntime(2392): at java.lang.reflect.Method.invokeNative(Native Method)
03-20 23:05:59.272: E/AndroidRuntime(2392): at java.lang.reflect.Method.invoke(Method.java:507)
03-20 23:05:59.272: E/AndroidRuntime(2392): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-20 23:05:59.272: E/AndroidRuntime(2392): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-20 23:05:59.272: E/AndroidRuntime(2392): at dalvik.system.NativeStart.main(Native Method)
Вот и у меня qualifierRoundListActivity отображается на вкладке и ниже, как я начинаю его с. . мой главный класс
public void setupTab(final View view, final String tag) {
View tabView = createTabView(tabHost.getContext(), tag);
TabSpec setContent = tabHost.newTabSpec(tag).setIndicator(tabView);
Intent intent;
if(tag == "Practice Rounds") {
intent = new Intent(this, practiceRoundListActivity.class);
setContent.setContent(intent);
}
else {
intent = new Intent(this, qualifierRoundListActivity.class);
setContent.setContent(intent);
}
tabHost.addTab(setContent);
}
private static View createTabView(final Context context, final String text) {
View view = LayoutInflater.from(context).inflate(R.layout.tabs_small, null);
TextView textView = (TextView) view.findViewById(R.id.tabsText);
textView.setText(text);
return view;
}
Когда я добавил статический метод внутри квалификационном ... класс:
public static void add(String event) {
values.add(event);
}
Я получил исключение нулевого указателя в строке values.add (event).
Можем ли мы увидеть, где вы инициализируете 'qualifierRoundListActivity.values'? Если это строка, то это выглядит так: «null» – codeMagic