Я использую обработчик для запуска асинхронной задачи, но при этом мое приложение падает. Причина, по которой я застрял, заключается в том, что если я запускаю асинхронную задачу через что-то еще (например, onClickListener), то я могу запускать ее столько раз, снова и снова, и она работает идеально каждый раз. Как только я выполняю асинхронную задачу из своего обработчика, она сразу же приводит к сбою приложения с NullPointerException.
Мой обработчик выглядит примерно так
public Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
handler.post(new Runnable() {
@Override
public void run() {
new sortNearby().execute();
}
});
}
};
Вот часть трассировки стека из приложения, показывающая исключение
Caused by: java.lang.NullPointerException
at badams.android.app.fragments.MainMenu_NearbyFragment$sortNearby.doInBackground(MainMenu_NearbyFragment.java:100)
Строка 100 моего кода является первой строкой в асинхронной задаче под doInBackground.
protected String doInBackground(String... args) {
for (int i = 0; i < global.places.size(); i++) { //this is line 100
Я понимаю, что исключение, скорее всего, происходит из-за того, что "global.places.size()", вероятно, имеет значение null, но я застрял в том, почему он делает это только при вызове из обработчика, поскольку он отлично работает, если я запускаю задачу из любой другой раздел моего кода.
ИЗМЕНИТЬ
По просьбе @Raghunandan, вот весь блок кода из doInBackground в моей асинтаске, который вычисляет расстояние между «местом» и пользователем:
class sortNearby extends AsyncTask<String, Place, String> {
protected String doInBackground(String... args) {
for (int i = 0; i < global.places.size(); i++) { //THIS IS LINE 100
Location locationA = new Location("place");
locationA.setLatitude(global.places.get(i).getLatitude());
locationA.setLongitude(global.places.get(i).getLongitude());
Location locationB = new Location("user");
locationB.setLatitude(global.applicationLocationManager.getLatitude());
locationB.setLongitude(global.applicationLocationManager.getLongitude());
float dist = locationA.distanceTo(locationB);
dist = dist / 1000;
global.places.get(i).setDistance(dist);
}
return null;
}
ИЗМЕНИТЬ 2
global — это класс, расширяющий приложение, и он определяется в действии следующим образом:
global = (ApplicationGlobal) getActivity().getApplicationContext();
global.places
? - person dmon   schedule 18.04.2013