InputStream имеет значение null, когда я пытаюсь загрузить файл gpx с сервера и проанализировать его - PullRequest
0 голосов
/ 30 августа 2018

Проблема в том, что скачивание файла 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 (если это правильный способ сделать это). Есть предложения по этому поводу?

Я был бы очень признателен, если бы вы помогли мне !!

Спасибо.

1 Ответ

0 голосов
/ 30 августа 2018

В InputStream in = getAssets().open("cycylingRoute.gpx"); где вы определяете "Загрузки"?

Вы используете File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); для хранения файла.

...