当我删除列表大小相同时,我的ArrayList不会更新

时间:2018-03-14 15:50:27

标签: java arraylist

我已经检查了日志,并且两个ArrayList都没有在日志中更新!它在if语句中更新,但在再次执行for循环时不会更新!我想要发生的是:

在执行嵌套的if-else语句后,将删除相应的ArrayList。当这个特定的arraylist的大小达到1时,它将执行第一个if语句并打破循环。

我在ParserTask类中的代码:

public 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]);
            DirectionsParser parser = new DirectionsParser();

            // 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;

        // Traversing through all the routes
        for (int i = 0; i < result.size(); i++) {
            points = new ArrayList<LatLng>();
            lineOptions = new PolylineOptions();

            // 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);

                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(30);
            lineOptions.color(Color.CYAN);

        }

        // Drawing polyline in the Google Map for the i-th route
        if (lineOptions == null) {
            totalDistance.clear();
            lineOptionsArray.clear();
            Toast.makeText(MainActivity.this, "Error! Please try again", Toast.LENGTH_LONG);

        } else {

                lineOptionsArray.add(lineOptions);
                Log.e("L.O.A.(Size)Int", String.valueOf(MainActivity.totalDistance.size()));
            Log.e("L.O.A.(Size)Array", String.valueOf(lineOptionsArray.size()));
                if (MainActivity.totalDistance.size() >= 2) {
                    for (int i = 0; i < MainActivity.totalDistance.size(); ++i) {
                        Log.e("L.O.A.(Size)Int", String.valueOf(MainActivity.totalDistance.size()));
                        Log.e("L.O.A.(Size)LOA(1st)", String.valueOf(lineOptionsArray.size()));
                        Log.e("L.O.A.(Size)LOA(int)", String.valueOf(i));
                        int j = 0;
                        if (MainActivity.totalDistance.size()  == 1) {
                            MainActivity.totalDistance.clear();
                            map.addPolyline(lineOptionsArray.get(0));
                            Log.e("L.O.A.(Size)Points", String.valueOf(lineOptionsArray.size()));
                            lineOptionsArray.clear();
                            break;
                        } else if (MainActivity.totalDistance.get(j) < MainActivity.totalDistance.get(j + 1)) {
                            Log.e("L.O.A.(Size)td1", String.valueOf(MainActivity.totalDistance.get(j + 1)));
                            MainActivity.totalDistance.remove(j + 1);
                            lineOptionsArray.remove(j + 1);
                            Log.e("L.O.A.(Size)td1distance", String.valueOf(MainActivity.totalDistance.size()));
                            Log.e("L.O.A.(Size)td1Poly", String.valueOf(lineOptionsArray.size()));
                        } else if (MainActivity.totalDistance.get(j) > MainActivity.totalDistance.get(j + 1)) {
                            Log.e("L.O.A.(Size)td2", String.valueOf(MainActivity.totalDistance.get(j + 1)));
                            MainActivity.totalDistance.remove(j);
                            lineOptionsArray.remove(j);
                        } else if (MainActivity.totalDistance.get(j) == MainActivity.totalDistance.get(j + 1)) {
                            Log.e("L.O.A.(Size)td3", String.valueOf(MainActivity.totalDistance.get(j + 1)));
                            MainActivity.totalDistance.remove(j + 1);
                            MainActivity.totalDistance.remove(j + 1);
                        }
                    }
                }
        }
    }

} 

DirectionsParser类(与日志“distance2total”相关):

package rjj.manilapuvtravelcompanion_2nd;

import android.util.Log;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.google.android.gms.maps.model.LatLng;

public class DirectionsParser {

    /** Receives a JSONObject and returns a list of lists containing latitude and longitude */
    public List<List<HashMap<String,String>>> parse(JSONObject jObject){

        List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>();
        JSONArray jRoutes = null;
        JSONArray jLegs = null;
        JSONArray jSteps = null;
        JSONArray jDistance = null;
        Integer distance2 = 0;
        String done = "notdone";

        try {

            jRoutes = jObject.getJSONArray("routes");

            /** Traversing all routes */
            for(int i=0;i<jRoutes.length();i++){
                jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
                List path = new ArrayList<HashMap<String, String>>();

                /** Traversing all legs */
                for(int j=0;j<jLegs.length();j++){
                    jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps");
                    //Log.e("distance", "it crashed here");
                    /*jDistance = ( (JSONObject)jLegs.get(j)).getJSONArray("distance");
                    MainActivity.totalDistance = jDistance.getInt(j);
                    Log.e("distance", String.valueOf(MainActivity.totalDistance));*/

                    /** Traversing all steps */
                    for(int k=0;k<jSteps.length();k++){
                        String polyline = "";
                        polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
                        List<LatLng> list = decodePoly(polyline);
                        //List<String> list3 =  new ArrayList<String>();
                        Integer distance = 0;
                        distance = (Integer)((JSONObject)((JSONObject)jSteps.get(k)).get("distance")).get("value");
                        distance2 += distance;



                        /*if(k == () {
                            MainActivity.totalDistance.add(distance2);
                            distance2 =0;
                            for (int z = 0; z < MainActivity.totalDistance.size(); z++) {
                                Log.e("distanceTotal", String.valueOf(MainActivity.totalDistance.get(z)));
                            }
                        }*/
                        /** Traversing all points */
                        for(int l=0;l<list.size();l++){
                            HashMap<String, String> hm = new HashMap<String, String>();
                            hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude) );
                            hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude) );
                            path.add(hm);
                        }
                    }

                    routes.add(path);
                }
            }
                if (distance2 == 0){

                }else {
                    MainActivity.totalDistance.add(distance2);
                }
                for (int a = 0; a < MainActivity.totalDistance.size(); a++) {
                    Log.e("distance2total", String.valueOf(MainActivity.totalDistance.get(a)));
                }
        } catch (JSONException e) {
            e.printStackTrace();
        }catch (Exception e){
        }

        return routes;
    }

    /**
     * Method to decode polyline points
     * Courtesy : jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
     * */
    private List<LatLng> decodePoly(String encoded) {

        List<LatLng> poly = new ArrayList<LatLng>();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            LatLng p = new LatLng((((double) lat / 1E5)),
                    (((double) lng / 1E5)));
            poly.add(p);
        }

        return poly;
    }
}

我得到的日志:

03-14 23:22:38.802 24073-24197/rjj.manilapuvtravelcompanion_2nd E/distance2total: 4817
03-14 23:22:38.802 24073-24197/rjj.manilapuvtravelcompanion_2nd E/distance2total: 4884
03-14 23:22:38.804 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)Int: 2
03-14 23:22:38.804 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)Array: 2
03-14 23:22:38.804 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)Int: 2
03-14 23:22:38.804 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)LOA(1st): 2
03-14 23:22:38.804 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)LOA(int): 0
03-14 23:22:38.804 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)td1: 4884
03-14 23:22:38.805 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)td1distance: 1
03-14 23:22:38.805 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)td1Poly: 1
03-14 23:22:38.806 24073-24197/rjj.manilapuvtravelcompanion_2nd E/distance2total: 4817
03-14 23:22:38.806 24073-24197/rjj.manilapuvtravelcompanion_2nd E/distance2total: 4817
03-14 23:22:38.808 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)Int: 2
03-14 23:22:38.808 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)Array: 2
03-14 23:22:38.808 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)Int: 2
03-14 23:22:38.808 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)LOA(1st): 2
03-14 23:22:38.808 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)LOA(int): 0
03-14 23:22:38.808 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)Int: 2
03-14 23:22:38.808 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)LOA(1st): 2
03-14 23:22:38.808 24073-24073/rjj.manilapuvtravelcompanion_2nd E/L.O.A.(Size)LOA(int): 1

0 个答案:

没有答案