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 中不起作用

如何使用 Ionic 2 重新加载页面

Ionic 选项卡无法在 Android 上正确呈现?

android webview怎么加载ionic的html5

无法在构建 Android 中使用 Ionic 加载资源

ionic 懒加载页面模块合并