2016-08-09 51 views
3

我在一個應用程序的工作有特殊要求的文件 - 應用程序脫機工作並具有「同步」機制。 這意味着按需提供,用戶可以將應用程序與服務器同步。 我實現了一個過程,使用科爾多瓦的「文件傳輸」和節點產生與最近的數據的JSON文件,並將其下載到本地文件系統。 現在,我天真地認爲我可以使用stabndard htrp rquest來獲取數據到這個文件。 但它沒有奏效。所以我檢查了我的設備的logcat,發現無法執行http請求到'file://'協議。寫這些線時,它很有意義。角2 /離子2讀取JSON從本地設備文件系統

那我該怎麼做呢? 如何獲取文件系統上的文件? 有沒有辦法僞裝設備上運行的服務或somwethibf?

謝謝!

回答

0

你可能已經想通了這一點,但是:

離開了協議,在你的路徑,所以不要使用「文件://」

而是直接使用的路徑,該文件是存儲,例如在Android上它可能是'/ assets/path/to/file'。 等你拿:

this.http.get('/assets/path/to/file').success(function(response){ //do something }); 
2

問題是因爲在本地瀏覽器(計算機)和設備(機器人)JSON文件不同的路徑。在src\assets文件夾內創建data文件夾。將你的json文件移入該文件。

當我們運行ionic serve,它會在該文件夾(包含文件)移動到文件夾www\assets。然後執行以下操作:

  1. 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() 
         }); 
    } 
    

  • 0

    只要使用 「資產/數據/ Items.json」 而不是 「/assets/data/Items.json」 作爲文件路徑。它可以在瀏覽器和Android設備上運行。

    this.http.get('assets/path/to/file').success((res) => { 
         console.log(res); 
        });