【发布时间】: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:/// 部分,但它仍然无法加载文件。
【问题讨论】:
标签: android json angular typescript ionic3