2017-05-29 5 views
1

ローカルのjsonデータファイルをロードしようとしましたが、私は.jsonファイルを/ src/assets/dataに配置していましたが、私が使用しているプロバイダはIonic 3ローカルのjsonファイルをロードするのがアンドロイドで失敗します

0 - {"isTrusted":true}

私はfile:///部分なしでも試してみました:ローカルブラウザでテストする場合、これはAndroidの上でこれをしようとするだけで、次のエラーテキストを返しながら、ロードされた適切なJSONデータを示してい

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

} 

しかし、それはまだwouldnファイルをロードしないでください。

答えて

0

あなたは

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

あなたがしているどのプラットフォーム上でチェックする必要はありを試みるべきではありません。

関連する問題