我已经检查了日志,并且两个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