我正在开发一个有特殊要求的应用 - 该应用离线工作并具有“同步”机制。 这意味着,按需,用户可以将应用程序与服务器同步。 我实现了一个使用cordova的'FileTransfer'并且节点生成带有最新数据的json文件的过程,并将其下载到本地文件系统。 现在,我天真地以为我可以使用stabndard htrp rquest来获取数据到这个文件。 但它没有用。所以我检查了我的设备的logcat,发现无法对'file://'协议执行http请求。在编写这些线条时,它实际上是有意义的。
那我怎么能这样做呢? 如何在文件系统上获取文件? 有没有办法伪造在设备或somwethibf上运行的服务?
谢谢!
答案 0 :(得分:3)
问题是由于本地浏览器(计算机)和设备(android)中json文件的路径不同。在data
文件夹中创建src\assets
文件夹。将您的json文件移动到该文件中。
当我们运行ionic serve
时,它会将该文件夹(带文件)移动到www\assets
文件夹中。然后做以下事情:
导入Platform
ionic2
服务
import { Platform } from 'ionic-angular';
注入Platform
服务。
constructor(private http: Http, private platform: Platform ) { }
使用Platform
服务。
public getItems() {
var url = 'assets/data/Items.json';
if (this.platform.is('cordova') && this.platform.is('android')) {
url = "/android_asset/www/" + url;
}
return this.http.get(url)
.map((res) => {
return res.json()
});
}
答案 1 :(得分:1)
只需使用" assets / data / Items.json"而不是" /assets/data/Items.json"作为文件路径。它将在浏览器和Android设备上运行。
this.http.get('assets/path/to/file').success((res) => {
console.log(res);
});
答案 2 :(得分:0)
您可能已经想到了这一点,但是:
在您的路径中省略协议,因此请勿使用'file://'
而是直接使用路径来存储文件的位置,例如在android上它可能是'/ assets / path / to / file'。 所以你得到:
this.http.get('/assets/path/to/file').success(function(response){ //do something });