added deserialization of the api response
This commit is contained in:
@@ -26,6 +26,9 @@ android {
|
|||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
}
|
}
|
||||||
|
repositories {
|
||||||
|
maven { url "https://jitpack.io" }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -47,6 +50,9 @@ dependencies {
|
|||||||
//osm
|
//osm
|
||||||
implementation 'org.osmdroid:osmdroid-android:6.1.8'
|
implementation 'org.osmdroid:osmdroid-android:6.1.8'
|
||||||
|
|
||||||
|
//osm bonus pack
|
||||||
|
implementation 'com.github.MKergall:osmbonuspack:6.6.0'
|
||||||
|
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
|
||||||
}
|
}
|
||||||
@@ -42,5 +42,6 @@ public class RouteFragment extends Fragment {
|
|||||||
|
|
||||||
public void onDirectionsAvailable(DirectionsResult result) {
|
public void onDirectionsAvailable(DirectionsResult result) {
|
||||||
Log.d(TAG, "onDirectionsAvailable: got result! " + result);
|
Log.d(TAG, "onDirectionsAvailable: got result! " + result);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.a1.nextlocation.json;
|
package com.a1.nextlocation.json;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
@@ -7,13 +9,18 @@ import com.google.gson.JsonElement;
|
|||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
|
import org.osmdroid.util.GeoPoint;
|
||||||
|
|
||||||
|
import java.lang.reflect.Array;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DirectionsResult {
|
public class DirectionsResult {
|
||||||
|
private static final String TAG = DirectionsResult.class.getCanonicalName();
|
||||||
private List<DirectionsStep> steps = new ArrayList<>();
|
private List<DirectionsStep> steps = new ArrayList<>();
|
||||||
private double distance;
|
private double distance;
|
||||||
private double duration;
|
private double duration;
|
||||||
|
private double[][] wayPointCoordinates;
|
||||||
|
|
||||||
public List<DirectionsStep> getSteps() {
|
public List<DirectionsStep> getSteps() {
|
||||||
return steps;
|
return steps;
|
||||||
@@ -46,8 +53,21 @@ public class DirectionsResult {
|
|||||||
public void parse(String json) {
|
public void parse(String json) {
|
||||||
|
|
||||||
Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||||
JsonObject features = JsonParser.parseString(json).getAsJsonObject().get("features").getAsJsonArray().get(0).getAsJsonObject();
|
JsonObject feature = JsonParser.parseString(json).getAsJsonObject().get("features").getAsJsonArray().get(0).getAsJsonObject();
|
||||||
JsonObject segment = features.get("properties").getAsJsonObject().getAsJsonArray("segments").get(0).getAsJsonObject();
|
JsonObject properties = feature.get("properties").getAsJsonObject();
|
||||||
|
JsonArray wayPointCoordinates = feature.get("geometry").getAsJsonObject().getAsJsonArray("coordinates");
|
||||||
|
this.wayPointCoordinates = new double[wayPointCoordinates.size()][2];
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < wayPointCoordinates.size(); i++) {
|
||||||
|
JsonElement j = wayPointCoordinates.get(i);
|
||||||
|
JsonArray arr = j.getAsJsonArray();
|
||||||
|
this.wayPointCoordinates[i][0] = arr.get(0).getAsDouble();
|
||||||
|
this.wayPointCoordinates[i][1] = arr.get(1).getAsDouble();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JsonObject segment = properties.getAsJsonArray("segments").get(0).getAsJsonObject();
|
||||||
|
|
||||||
setDistance(segment.get("distance").getAsDouble());
|
setDistance(segment.get("distance").getAsDouble());
|
||||||
setDuration(segment.get("duration").getAsDouble());
|
setDuration(segment.get("duration").getAsDouble());
|
||||||
@@ -56,7 +76,18 @@ public class DirectionsResult {
|
|||||||
|
|
||||||
for (JsonElement j : steps) {
|
for (JsonElement j : steps) {
|
||||||
DirectionsStep step = gson.fromJson(j,DirectionsStep.class);
|
DirectionsStep step = gson.fromJson(j,DirectionsStep.class);
|
||||||
addStep(step);
|
double lat;
|
||||||
|
double longl;
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
lat = this.wayPointCoordinates[step.getWay_points().get(i)][0];
|
||||||
|
longl = this.wayPointCoordinates[step.getWay_points().get(i)][1];
|
||||||
|
step.getWaypoints()[i] = new GeoPoint(lat,longl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addStep(step);
|
||||||
|
Log.d(TAG, "parse: added step" + step);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,26 @@
|
|||||||
package com.a1.nextlocation.json;
|
package com.a1.nextlocation.json;
|
||||||
|
|
||||||
|
import org.osmdroid.util.GeoPoint;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pojo class that holds the step object from the api response
|
||||||
|
*/
|
||||||
public class DirectionsStep {
|
public class DirectionsStep {
|
||||||
private double distance;
|
private double distance;
|
||||||
private double duration;
|
private double duration;
|
||||||
private String instruction;
|
private String instruction;
|
||||||
private String name;
|
private String name;
|
||||||
|
/**
|
||||||
|
* these are the actual waypoints that the step refers to. The first is the beginning of the step, and the second is what it leads to.
|
||||||
|
* The second geopoint is always the first geopoint of the next step in the list of the {@link DirectionsResult} object.
|
||||||
|
*/
|
||||||
|
private GeoPoint[] waypoints = new GeoPoint[2];
|
||||||
|
/**
|
||||||
|
* this is a list of the waypoints that are in the response, it is called way_points so it can be automatically serialized with gson
|
||||||
|
*/
|
||||||
|
private ArrayList<Integer> way_points;
|
||||||
|
|
||||||
public double getDistance() {
|
public double getDistance() {
|
||||||
return distance;
|
return distance;
|
||||||
@@ -37,4 +53,20 @@ public class DirectionsStep {
|
|||||||
public void setName(String name) {
|
public void setName(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<Integer> getWay_points() {
|
||||||
|
return way_points;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWay_points(ArrayList<Integer> way_points) {
|
||||||
|
this.way_points = way_points;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GeoPoint[] getWaypoints() {
|
||||||
|
return waypoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWaypoints(GeoPoint[] waypoints) {
|
||||||
|
this.waypoints = waypoints;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user