2017-05-29 4 views
1

Ich habe versucht, eine lokale JSON-Datei zu laden, legte ich meine .JSON-Dateien in/src/Assets/Daten und der Provider, den ich verwende ist der folgende:Ionic 3 Laden lokalen JSON-Dateien schlägt auf Android

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); 
    } 

} 

Wenn im lokalen Browser-Test tut dies die richtigen json Daten zeigen, die geladen wurde, während dies nur auf android versucht, gibt den folgenden Fehlertext:

0 - {"isTrusted":true}

ich auch ohne den Teil file:/// versucht aber es würde immer noch nicht lade die Datei nicht.

Antwort

0

sollten Sie versuchen,

this.localApiUrl = "./assets/data"; 

keine Notwendigkeit, auf zu prüfen, welche Plattform Sie sind.