Ionic 3 在 android 上加载本地 json 文件失败
Posted
技术标签:
【中文标题】Ionic 3 在 android 上加载本地 json 文件失败【英文标题】:Ionic 3 loading local json files fails on android 【发布时间】:2017-10-29 22:11:06 【问题描述】:我一直在尝试加载本地 json 数据文件,我将 .json 文件放在 /src/assets/data 中,我使用的提供程序如下:
import Injectable from '@angular/core';
import Http, Response from '@angular/http';
import Observable from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/from';
import 'rxjs/add/observable/throw';
import Platform from 'ionic-angular';
/*
Generated class for the JsonProvider provider.
See https://angular.io/docs/ts/latest/guide/dependency-injection.html
for more info on providers and Angular 2 DI.
*/
@Injectable()
export class JsonProvider
private localApiUrl: string;
private remoteApiUrl: string;
constructor(public http: Http, private platform: Platform)
//console.log('Hello JsonProvider Provider');
if (this.platform.is('cordova') && this.platform.is('android'))
this.localApiUrl = "file:///android_asset/www/data";
else
this.localApiUrl = "assets/data";
GetLocalData(file: string): Observable<any>
return this.http.get(`$this.localApiUrl/$file.json`)
.map(this.extractData)
.catch(this.handleError);
GetRemoteData(url: string): Observable<string[]>
return this.http.get(`$this.remoteApiUrl/$url`)
.map(this.extractData)
.catch(this.handleError);
GetGareList(): Observable<any>
return this.GetLocalData("gareList");
GetGara(Id: number): Observable<any>
return this.http.get(`$this.localApiUrl/gare.json`)
.map(res =>
let body = res.json();
if (body)
return body.filter(x => return x.Id == Id )[0];
else
return ;
)
.catch(this.handleError);
private extractData(res: Response)
let body = res.json();
return body || ;
private handleError(error: Response | any)
let errMsg: string;
if (error instanceof Response)
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `$error.status - $error.statusText || '' $err`;
else
errMsg = error.message ? error.message : error.toString();
console.error(errMsg);
return Observable.throw(errMsg);
在本地浏览器中进行测试时,这确实显示了在 android 上尝试此操作时加载的正确 json 数据,只是返回以下错误文本:
0 - "isTrusted":true
我也尝试不使用file:///
部分,但它仍然无法加载文件。
【问题讨论】:
【参考方案1】:你应该试试
this.localApiUrl = "./assets/data";
无需检查您在哪个平台上。
【讨论】:
以上是关于Ionic 3 在 android 上加载本地 json 文件失败的主要内容,如果未能解决你的问题,请参考以下文章
Ionic 3 本地通知 LED/声音在 Android 中不起作用