SachinKS 2013-01-08 05:25 采纳率: 0%
浏览 1666

AsyncTask onPostExecute NullPointerException

创建了两个AsyncTask,但是当把第一个AsyncTask的输出当做输入传给第二个AsyncTask时,就会出现空值异常,第一个AsyncTask 是Geopoint。

String input=EnterYourSearch.getText().toString();
Geopoint point_to_be_send;
     get_location.execute(input);       
     getplaces.execute(point_to_be_send);
        public class Getlocation extends AsyncTask<String, String, Geopoint> 
        { 
          @Override
          protected Geopoint doInBackground(String... params) {
            jsonobject=JsonRequest.getLocationInfo(params[0]);   
            point=JsonRequest.getLatLong(jsonobject);     
            return point;    
          }
          @Override
          protected void onPostExecute( Geopoint point) {
            if(point.lat !=0)
            {
              //check=false;
              point_to_be_send=point;
            }
          }
        }
    public class Getplaces extends AsyncTask<Geopoint, String, Boolean>
        {
            @Override
            protected Boolean doInBackground(Geopoint... params) {
                // TODO Auto-generated method stub
                 googleplaces=new Googleplaces();
                       try {
                        googleplaces.search(params[0].lat, params[0].lon, 1000, null);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        Log.d("Error", e.toString());
                        e.printStackTrace();
                    }
                    return true;
                    }

Geopoint 类:

public class Geopoint {
    public double lat;
    public double lon;
    public Geopoint(double i, double j) {
        // TODO Auto-generated constructor stub
        lat=i;
        lon=j;
    }
}
  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-19 14:10
    关注

    ChatGPT尝试为您解答
    在您的代码中,您正在尝试在第一个 AsyncTask 完成后执行第二个 AsyncTask,并将第一个 AsyncTask 返回的 Geopoint 对象作为输入传递给第二个 AsyncTask。但是,您在第一个 AsyncTask 的 onPostExecute() 方法中将 Geopoint 对象赋值给 point_to_be_send 变量之前,您就在第二个 AsyncTask 中调用了 execute() 方法,并尝试使用 point_to_be_send 变量作为输入。


    这意味着在第二个 AsyncTask 运行时,point_to_be_send 变量可能尚未初始化。因此,当您尝试使用 point_to_be_send 变量时,您可能会遇到空值异常。


    为了解决这个问题,您可以在第一个 AsyncTask 的 onPostExecute() 方法中调用第二个 AsyncTask 的 execute() 方法,这样就可以确保 point_to_be_send 变量已经初始化。例如:

    public class Getlocation extends AsyncTask<String, String, Geopoint> 
    { 
      @Override
      protected Geopoint doInBackground(String... params) {
        jsonobject=JsonRequest.getLocationInfo(params[0]);   
        point=JsonRequest.getLatLong(jsonobject);     
        return point;    
      }
      @Override
      protected void onPostExecute( Geopoint point) {
        if(point.lat !=0)
        {
          //check=false;
          point_to_be_send=point;
          getplaces.execute(point_to_be_send);
        }
      }
    }
    

    这样,当第一个 AsyncTask 完成后,就可以将 point_to_be_send 变量作为输入传递给第二个 AsyncTask。

    评论

报告相同问题?

悬赏问题

  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?