如何在android中的AsyncTask中使用方法?

Pal*_*aja 3 android google-maps driving-directions

在我的应用程序中,我使用JSONwebservice从中获取数据Google Navigation api.我用下面的代码.我得到以下异常

android.os.NetworkOnMainThreadException.

如何使用AsyncTask?这是我的代码.谢谢.public class MainActivity扩展MapActivity {

  MapView mapView ;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    System.out.println("*************1**************1");
    setContentView(R.layout.activity_main);
    System.out.println("*************2**************");
    mapView = (MapView) findViewById(R.id.mapv); 
    System.out.println("*************3**************");



                Route route = directions(new GeoPoint((int)(26.2*1E6),(int)(50.6*1E6)), new GeoPoint((int)(26.3*1E6),(int)(50.7*1E6)));

              RouteOverlay routeOverlay = new RouteOverlay(route, Color.BLUE);
              mapView.getOverlays().add(routeOverlay);
            mapView.invalidate();


    System.out.println("*************4**************");

}



@SuppressLint("ParserError")
private Route directions(final GeoPoint start, final GeoPoint dest) {



    //https://developers.google.com/maps/documentation/directions/#JSON <- get api
    String jsonURL = "http://maps.googleapis.com/maps/api/directions/json?";
    final StringBuffer sBuf = new StringBuffer(jsonURL);
    sBuf.append("origin=");
    sBuf.append(start.getLatitudeE6()/1E6);
    sBuf.append(',');
    sBuf.append(start.getLongitudeE6()/1E6);
    sBuf.append("&destination=");
    sBuf.append(dest.getLatitudeE6()/1E6);
    sBuf.append(',');
    sBuf.append(dest.getLongitudeE6()/1E6);
    sBuf.append("&sensor=true&mode=driving");

    Parser parser = new GoogleParser(sBuf.toString());
      Route   r =  parser.parse();
   System.out.println("********r in thread*****" +r);                  
            return r;
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}
Run Code Online (Sandbox Code Playgroud)

}

Sni*_*las 5

@imran khan使用另一个线程的想法是正确的.从HoneyComb及以上版本,您无法在UI线程内部执行任何网络操作.UI线程是负责显示视图和接收触摸事件的线程,它必须是免费的,不会被长时间运行的操作阻止.(否则你在Android上有一个ANR).

但是,对于网络请求等长时间运行的操作,使用AsyncTask实际上并不是一个好主意.AsyncTask javadoc甚至声称它们是为短期运行操作设计的......

最好的方法是使用服务.我鼓励您从RoboSpice库中读取此信息图并使用RoboSpice,它将简化使用网络创建服务的过程,并使您可以更轻松地使用Spring Android解析您的json内容.

在此输入图像描述