首页 > 解决方案 > 当我尝试从服务器下载 gpx 文件并解析它时,InputStream 为空

问题描述

问题是在 Android 设备上通过 http get request (retrofit) 下载 gpx 文件,解析它并在谷歌地图上显示路线。

我已经使用改造完成了第一件事,并将“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 arsenal 的第三方库: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”为空并引发异常时。我在哪里做错了?

而不是这一行 -> InputStream is = getClass().getResourceAsStream(file.getName());

我也试过这个 -> InputStream in = getAssets().open("cycylingRoute.gpx");

并抛出一个异常,告诉您没有找到目录或文件。

而且我还计划收集 json 中的所有曲目并将其传递给谷歌地图(如果这是正确的方法)。对此有何建议?

如果你能帮助我,我真的很感激!!

谢谢。

标签: javaandroidgoogle-mapsgoogle-maps-markersgpx

解决方案


您在InputStream in = getAssets().open("cycylingRoute.gpx");哪里定义“下载”?

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);用于存储文件。


推荐阅读