java - 当我尝试从服务器下载 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 中的所有曲目并将其传递给谷歌地图(如果这是正确的方法)。对此有何建议?
如果你能帮助我,我真的很感激!!
谢谢。
解决方案
您在InputStream in = getAssets().open("cycylingRoute.gpx");
哪里定义“下载”?
您File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
用于存储文件。
推荐阅读
- api - 谷歌防火墙 API 的 PHP 脚本
- mysql - mysql 按查询分组(非常接近)
- scala - 使用过滤器或映射应用转换哪个更快 Scala spark
- linux - CentOS 将文件复制到 /home/ansible-user/ 时没有剩余磁盘空间,但是 admin-vol1 为 100gb
- javascript - 如何在没有一堆 if else 语句的情况下编写这个函数?
- c - 我的数组 printf 循环最后缺少一位数字
- android - Firebase Crashlytics 自定义电子邮件/Slack 标头
- java - Hibernate“对象引用了未保存的瞬态实例”问题
- php - 数组中的数组 PHP Foreach
- responsive-design - Bootstrap 4:当 .table-responsive 变为水平滚动时显示一个图标