我的程序擦除第一个计算,然后将最后一个计算放入数组中

时间:2013-11-22 12:18:15

标签: android arrays

我正在尝试计算用户位置到两个目的地之间的最短路径 并将距离值放入数组中。

而是将所有计算放入数组中,我在数组中得到的结果只是距离第二个目标的距离。显然我的程序擦除了第一次计算,然后开始下一次计算。我应该纠正什么,以便我的程序不会擦除第一次计算并将所有距离放入数组?

它应该是这样的:

  1. distance1 =从用户locationA到LocationH的距离

  2. distance2 =距用户locationA到LocationI的距离

  3. 添加距离distanArray

  4. 结果是distanArray =(distance1,distance2)

  5. 我现在拥有的:

    distanArray =(距离2)

    这是我的代码

    public class MainActivity extends FragmentActivity implements LocationListener {
    
    TextView tvDistanceDuration;
    TextView tvDistanceDuration2;
    TextView tvDistanceDuration3;
    private LocationManager locationManager;
    private String provider;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calcdistance);
    
        tvDistanceDuration = (EditText) findViewById(R.id.editText1);
        tvDistanceDuration2 = (EditText) findViewById(R.id.editText2);
        tvDistanceDuration3 = (EditText) findViewById(R.id.editText3);
    
        // Get the location manager
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        Location location = locationManager.getLastKnownLocation(provider);
    
        // Initialize the location fields
        if (location != null) {
            System.out.println("Provider " + provider + " has been selected.");
            onLocationChanged(location);
           } 
        else {
    
                  Toast.makeText( getApplicationContext(),
                            "Location not available",
                            Toast.LENGTH_LONG).show();
                }
              }
    
        /* Request updates at startup */
        @Override
        protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(provider, 400, 1, this);
        }
    
        /* Remove the location listener updates when Activity is paused */
        @Override
        protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this);
         }
    
        @Override
        public void onLocationChanged(Location location) {
        double lat = (double) (location.getLatitude());
        double lon = (double) (location.getLongitude());
    
        Location locationA = new Location("USER");  
        locationA.setLatitude(lat);  
        locationA.setLongitude(lon);
    
        List<LatLng> pointss = new ArrayList<LatLng>();
        List<LatLng> pointsss = new ArrayList<LatLng>();
    
        Location locationH = new Location("Shelter 7");  
        locationH.setLatitude(-0.868101);  
        locationH.setLongitude(119.888341);
    
        Location locationI = new Location("Shelter 8");  
        locationI.setLatitude(-0.900198);  
        locationI.setLongitude(119.88856);
    
        LatLng des = new LatLng(locationA.getLatitude(), locationA.getLongitude());
        LatLng des1 = new LatLng(locationH.getLatitude(), locationH.getLongitude());                    
        LatLng des2 = new LatLng(locationI.getLatitude(), locationI.getLongitude());
    
        pointss.add(des1);
        pointss.add(des2);
        pointsss.add(des);
        tvDistanceDuration3.setText(String.valueOf(pointss));
    
        for (int i = 0; i <(pointss.size()); i++) { 
            LatLng origin = pointsss.get(0);
            LatLng dest = pointss.get(i);
    
            // Getting URL to the Google Directions API
        String url = getDirectionsUrl(origin, dest);                
    
        DownloadTask downloadTask = new DownloadTask();
    
        // Start downloading json data from Google Directions API
        downloadTask.execute(url);
    }
    }
    
        private String getDirectionsUrl(LatLng origin,LatLng dest){
    
            // Origin of route
            String str_origin = "origin="+origin.latitude+","+origin.longitude;
    
            // Destination of route
            String str_dest = "destination="+dest.latitude+","+dest.longitude;      
    
            // Sensor enabled
            String sensor = "sensor=false";         
    
            // Building the parameters to the web service
            String parameters = str_origin+"&"+str_dest+"&"+sensor;
    
            // Output format
            String output = "json";
    
            // Building the url to the web service
            String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;
    
    
            return url;
        }
    
        /** A method to download json data from url */
        private String downloadUrl(String strUrl) throws IOException{
            String data = "";
            InputStream iStream = null;
            HttpURLConnection urlConnection = null;
            try{
                    URL url = new URL(strUrl);
    
                    // Creating an http connection to communicate with url 
                    urlConnection = (HttpURLConnection) url.openConnection();
    
                    // Connecting to url 
                    urlConnection.connect();
    
                    // Reading data from url 
                    iStream = urlConnection.getInputStream();
    
                    BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
    
                    StringBuffer sb  = new StringBuffer();
    
                    String line = "";
                    while( ( line = br.readLine())  != null){
                            sb.append(line);
                    }
    
                    data = sb.toString();
    
                    br.close();
    
            }catch(Exception e){
                    Log.d("Exception while downloading url", e.toString());
            }finally{
                    iStream.close();
                    urlConnection.disconnect();
            }
            return data;
         }
    
    
    
        // Fetches data from url passed
        private class DownloadTask extends AsyncTask<String, Void, String>{         
    
            // Downloading data in non-ui thread
            @Override
            protected String doInBackground(String... url) {
    
                // For storing data from web service
                String data = "";
    
                try{
                    // Fetching the data from web service
                    data = downloadUrl(url[0]);
                }catch(Exception e){
                    Log.d("Background Task",e.toString());
                }
                return data;        
            }
    
            // Executes in UI thread, after the execution of
            // doInBackground()
            @Override
            protected void onPostExecute(String result) {           
                super.onPostExecute(result);            
    
                ParserTask parserTask = new ParserTask();
    
                // Invokes the thread for parsing the JSON data
                parserTask.execute(result);
    
            }       
        }
    
        /** A class to parse the Google Places in JSON format */
        private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{
    
            // Parsing the data in non-ui thread        
            @Override
            protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {
    
                JSONObject jObject; 
                List<List<HashMap<String, String>>> routes = null;                     
    
                try{
                    jObject = new JSONObject(jsonData[0]);
                    DirectionsJSONParser parser = new DirectionsJSONParser();
    
                    // Starts parsing data
                    routes = parser.parse(jObject);    
                }catch(Exception e){
                    e.printStackTrace();
                }
                return routes;
            }
    
            // Executes in UI thread, after the parsing process
            @Override
            protected void onPostExecute(List<List<HashMap<String, String>>> result) {
                ArrayList<LatLng> points = null;
                PolylineOptions lineOptions = null;
                String distance = "";
                String duration = "";
                ArrayList<String> distan = new ArrayList<String>();
    
    
                if(result.size()<1){
                    Toast.makeText(getBaseContext(), "No Points", Toast.LENGTH_SHORT).show();
                    return;
                }
    
    
                // Traversing through all the routes
                for(int i=0;i<result.size();i++){
                    points = new ArrayList<LatLng>();
                    lineOptions = new PolylineOptions();
                    points = new ArrayList<LatLng>();
    
                    // Fetching i-th route
                    List<HashMap<String, String>> path = result.get(i);
    
                    // Fetching all the points in i-th route
                    for(int j=0;j<path.size();j++){
                        HashMap<String,String> point = path.get(j); 
    
                        if(j==0){   // Get distance from the list
                            distance = (String)point.get("distance");
                            distan.add(distance);
                            continue;
                        }else if(j==1){ // Get duration from the list
                            duration = (String)point.get("duration");
                            continue;
                        }
    
                        double lat = Double.parseDouble(point.get("lat"));
                        double lng = Double.parseDouble(point.get("lng"));
                        LatLng position = new LatLng(lat, lng); 
    
                        points.add(position);   
    
                    }
    
                    // Adding all the points in the route to LineOptions
                    lineOptions.addAll(points);
                    lineOptions.width(2);
                    lineOptions.color(Color.RED);
    
    
                }
    
                String minDist = Collections.min(distan);
                tvDistanceDuration.setText("Distance:"+minDist + ", Duration:"+duration);
                tvDistanceDuration2.setText(String.valueOf(distan));
            }           
        }
    
        @Override
        public void onProviderDisabled(String arg0) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onProviderEnabled(String arg0) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
            // TODO Auto-generated method stub
    
        }   
    
    
    }
    

0 个答案:

没有答案