처리기를 사용하여 asynctask를 시작하지만 그렇게하면 응용 프로그램이 충돌합니다. 내가 붙어있는 이유는 다른 것 (예 : onClickListener)을 통해 asynctask를 시작하면 여러 번 반복해서 실행할 수 있기 때문입니다. 매번 완벽하게 작동합니다. 내 처리기에서 asynctask를 실행하자마자 즉시 NullPointerException으로 응용 프로그램이 중단됩니다.asynctask가 처리기에서 호출 될 때 arraylist를 가져 오지 않습니다.
내 핸들러는 다음이
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();
}
});
}
};
같은 응용 프로그램에서 스택 추적의 일부 내 코드의
라인 (100)은 AsyncTask를 아래의 첫 번째 라인을 제외하고
Caused by: java.lang.NullPointerException
at badams.android.app.fragments.MainMenu_NearbyFragment$sortNearby.doInBackground(MainMenu_NearbyFragment.java:100)
을 보여주는 보인다 doInBackground
protected String doInBackground(String... args) {
for (int i = 0; i < global.places.size(); i++) { //this is line 100
예외가 더 있음을 이해합니다. "global.places.size()"가 null 일 가능성이 높습니다.하지만 코드의 다른 섹션에서 작업을 시작하면 정상적으로 작동하므로 핸들러에서 호출 할 때만 해당 작업을 수행하는 이유가 무엇인지 몰라요.
EDIT
@Raghunandan의 요청에 따라, 여기서 "대신"사용자 사이의 거리를 계산하는 제 AsyncTask를에 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 = (ApplicationGlobal) getActivity().getApplicationContext();
게시물 asynctask 코드 – Raghunandan
@Raghunandan은 doInBackground의 전체 코드 블록으로 질문을 업데이트했습니다. – Badams
asycntask가 UI 스레드에로드되어야합니다. http://developer.android.com/reference/android/os/AsyncTask.html. 주제 스레드 규칙을 확인하십시오. – Raghunandan