Проблема в том, что скачивание файла gpx через http get request (retrofit) на устройство Android, его разбор и отображение маршрута на картах google.
Я первым делом использовал модификацию и сохранил файл наподобие cyclingRoute.gpx для загрузки файла на устройство следующим образом:
NetworkBuilder.getAppNetwork().getRoute(routeId).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.e("@@@@@@@@@@@", "API SUCCESS");
try {
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File file = new File(path, "cyclingRoute.gpx");
FileOutputStream fileOutputStream = new FileOutputStream(file);
IOUtils.write(response.body().bytes(), fileOutputStream);
parseRoute(file);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e("@@@@@@@@@@@", "API FAILS" + t.getMessage());
}
});
для парсинга я использовал стороннюю библиотеку из арсенала Android: https://github.com/ticofab/android-gpx-parser
GPXParser mParser = new GPXParser();
Gpx parsedGpx = null;
try {
InputStream is = getClass().getResourceAsStream(file.getName());
parsedGpx = mParser.parse(is);
} catch (IOException | XmlPullParserException e) {
// do something with this exception
e.printStackTrace();
}
if (parsedGpx == null) {
// error parsing track
} else {
// do something with the parsed track
List<Track> tracks = parsedGpx.getTracks();
for (int i = 0; i < tracks.size(); i++) {
Track track = tracks.get(i);
Log.d(TAG, "track " + i + ":");
List<TrackSegment> segments = track.getTrackSegments();
for (int j = 0; j < segments.size(); j++) {
TrackSegment segment = segments.get(j);
Log.d(TAG, " segment " + j + ":");
for (TrackPoint trackPoint : segment.getTrackPoints()) {
Log.d(TAG, " point: lat " + trackPoint.getLatitude() + ", lon " + trackPoint.getLongitude());
}
}
}
}
Когда я запускаю код, InputStream is null и выдает исключение. Где я делаю не так?
Вместо этой строки -> InputStream is = getClass (). GetResourceAsStream (file.getName ());
я тоже попробовал -> InputStream in = getAssets (). Open ("cycylingRoute.gpx");
и выдает исключение, сообщающее, что каталог или файл не найден.
а также я планирую собрать все треки в json и передать их на карты Google (если это правильный способ сделать это). Есть предложения по этому поводу?
Я был бы очень признателен, если бы вы помогли мне !!
Спасибо.