【问题标题】:Ionic 3 loading local json files fails on androidIonic 3 在 android 上加载本地 json 文件失败
【发布时间】: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


    【解决方案1】:

    你应该试试

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

    无需检查您在哪个平台上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      相关资源
      最近更新 更多