Java 从处理程序调用asynctask时未获取arraylist

Java 从处理程序调用asynctask时未获取arraylist,java,android,android-asynctask,android-handler,Java,Android,Android Asynctask,Android Handler,我正在使用处理程序启动异步任务,但这样做时,我的应用程序崩溃。我陷入困境的原因是,如果我通过任何其他方式(例如onClickListener)启动asynctask,那么我就可以反复运行它无数次,而且每次运行都非常完美。只要我从处理程序执行asynctask,它就会立即使用NullPointerException使应用程序崩溃 我的处理程序看起来像这样 public Handler handler = new Handler() { @Override public void

我正在使用处理程序启动异步任务,但这样做时,我的应用程序崩溃。我陷入困境的原因是,如果我通过任何其他方式(例如onClickListener)启动asynctask,那么我就可以反复运行它无数次,而且每次运行都非常完美。只要我从处理程序执行asynctask,它就会立即使用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下asynctask的第一行

protected String doInBackground(String... args) {
  for (int i = 0; i < global.places.size(); i++) { //this is line 100

如果
NullPointerException
位于第100行,则
global
global.places
将返回
null

你试过调试同样的程序吗

调试将帮助您跟踪正在发生的事情

同样从处理程序中,我看不到如何调用
doInBackground
方法


全局变量定义在哪里?初始化的位置和时间?

@Raghunandan使用doInBackground.asycntTask的整个代码块更新了该问题,该任务应加载到ui线程中。检查主题线程rules@Raghunandanhandler.post()确实在UI线程上运行,不是吗?关键部分不是doInBackground,而是
global.places
从何而来?为什么不在onLocationUpdate中实例化异步任务?不需要调用doInBackground()这是一个被重写的方法,它将在onPreExecute()执行时立即执行是的,我现在可以看到。当我回答时,类任务丢失了。但是全局变量初始化的位置/方式仍然丢失。@BhushanBhangale它在编辑下2@Badams是的,我现在看到了,在我回答后你编辑了。无论如何,您能确认关于全局变量和调试的问题吗?@BhushanBhangale global在活动的onResume部分初始化。至于调试,我对调试器不太熟悉,我相信如果我有多一点调试经验的话,它可以帮我解决这个问题
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;
}
global = (ApplicationGlobal) getActivity().getApplicationContext();