cordova - Angular 2/ionic 2 lese json-fil fra lokal enhets filsystem
Jeg jobber med en app med et spesielt krav - appen fungerer offline og har en "sync"-mekanisme. Det betyr at brukeren på forespørsel kan synkronisere appen med serverne. Jeg implementerte en prosess som bruker Cordovas 'FileTransfer' og Node til å generere en json-fil med de nyeste dataene, og laster den ned til det lokale filsystemet. Nå trodde jeg naivt at jeg bare kunne hente dataene ved hjelp av en standard HTTP-forespørsel til denne filen. Men det fungerte ikke. Så jeg undersøkte logcat på enheten min og fant ut at det ikke er mulig å utføre HTTP-forespørsler til 'file://'-protokollen. Mens jeg skriver disse linjene gir det faktisk mening.
Hvordan kan jeg gjøre det uansett? Hvordan kan jeg hente en fil fra filsystemet? Finnes det en måte å late som om en tjeneste kjører på enheten eller noe sånt?
Takk!
Svar #1
Problemet skyldes forskjellige baner til json-filer på lokal nettleser (datamaskin) og enhet (Android). Opprett en data-mappe inne i src\assets-mappen. Flytt json-filen din dit.
Når vi kjører ionic serve, vil det flytte den mappen (med filen) inn i www\assets-mappen. Gjør deretter følgende ting:
Importer
Platform-tjenesten fraionic2import { Platform } from 'ionic-angular';
Injiser
Platformtjeneste.constructor(private http: Http, private platform: Platform ) { }
Bruk
Platform-tjenesten.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() }); }
Svar #2
Bare bruk "assets/data/Items.json" i stedet for "/assets/data/Items.json" som filbane. Det vil fungere både i nettleser og på Android-enhet.
this.http.get('assets/path/to/file').success((res) => {
console.log(res);
});
