how to do functions in an AsyncTask?

前端 未结 3 937
名媛妹妹
名媛妹妹 2021-01-23 06:59

I have to use directions() function in an AsyncTask to avoid network processing on the UI thread.i\'m unable to do this thing. MY code is

    public class MainAc         


        
3条回答
  •  时光取名叫无心
    2021-01-23 07:54

    Perhaps like this?

    public class MainActivity extends MapActivity {
    
        private MapView mapView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mapView = (MapView) findViewById(R.id.mapview); //or you can declare it directly with the API key
            // You can execute it at onCreate or whenever you want, for example: in a click event
            new AsyncRoutes().execute();
        }
    
        private Route directions(final GeoPoint start, final GeoPoint dest) {
            Parser parser;
            //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 = new GoogleParser(sBuf.toString());
            Route r =  parser.parse();
            return r;
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
    
        @Override
        protected boolean isRouteDisplayed() {
            // TODO Auto-generated method stub
            return false;
        }
    
        private class AsyncRoutes extends AsyncTask {
    
            private ProgressDialog pDialog;
    
            @Override
            protected void onPreExecute() {
    
                pDialog = new ProgressDialog(LoginActivity.this);
                pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                pDialog.setMessage("Obtaining routes...");
                pDialog.setCancelable(false);
                pDialog.show();
            }
    
            @Override
            protected Route doInBackground(Void... params) {
    
                Route route = directions(new GeoPoint((int)(26.2*1E6),(int)(50.6*1E6)), new GeoPoint((int)(26.3*1E6),(int)(50.7*1E6)));
                return route;
            }
    
            @Override
            protected void onPostExecute(Route route) {         
    
                RouteOverlay routeOverlay = new RouteOverlay(route, Color.BLUE);
                mapView.getOverlays().add(routeOverlay);
                mapView.invalidate();
    
                pDialog.dismiss();
            }
        }
    
    }
    

提交回复
热议问题