2015-06-12 29 views
1

我正在開發Codename中的應用程序,用於查看離線報告,這些報告以HTML格式進行,資源包含在單獨的文件夾中。該應用程序下載HTML並複製資源的文件夾結構,因爲它們是在HTML中引用的。當我用普通瀏覽器打開報告並將其指向「/.cn1」文件夾時,它會正確加載並顯示。在使用模擬器時,HTML被加載到Codename One Web瀏覽器對象中並顯示出來(我可以看到報告的標題),這只是Web瀏覽器沒有加載任何資源。我也將基本URL設置爲該文件夾。Codename One WebBrowser從FileSystemStorage中加載HTML

WebBrowser wbBrowser = (WebBrowser) findByName("WebBrowser", f); 
    FileSystemStorage fs = FileSystemStorage.getInstance(); 
    wbBrowser.setPage(getTextFromFile(fs.getAppHomePath() + "/Reports/Report_2.html"), fs.getAppHomePath() + "/Reports/Report_2_files_files"); 

這是我目前使用的代碼。在報表查看器窗體顯示後運行。我已經在Android Lollipop中的默認瀏覽器和Mozilla Firefox Android應用程序中打開了報告,並且它顯示了包含所有圖像和CSS的網頁,因此我不確定它是否是代碼名稱一個安全問題。任何想法將不勝感激。

編輯:我試圖簡化應用程序,我只是運行下面的代碼;

 WebBrowser wbBrowser = (WebBrowser) findByName("WebBrowser", Display.getInstance().getCurrent()); 
     FileSystemStorage fs = FileSystemStorage.getInstance(); 
     fs.mkdir(fs.getAppHomePath() + "[Folder Name]"); 
     Util.downloadUrlToFile("http://[IpAddress]/mobile/admin/Report_2.html", fs.getAppHomePath() + "[Folder Name]/Report_2.html", true); 
     if (FileSystemStorage.getInstance().exists(fs.getAppHomePath() + "[Folder Name]/Report_2.html") == true) { 
      wbBrowser.setURL(fs.getAppHomePath() + "[Folder Name]/Report_2.html"); 
      Dialog.show("Success", "File has been downloaded and shown as " + wbBrowser.getTitle(), "Ok", ""); 
     } 
     else { 
      Dialog.show("Failiure", "File has not been downloaded", "Ok", ""); 
     } 

當運行Android Lollipop的設備上運行時,會顯示成功對話框,儘管我在設備上運行搜索時沒有找到他們(我不知道在哪裏代號爲一個存儲文件的存儲位置)。沒有其他代碼在設備上的任何地方運行,但是當將HTML文檔自己存儲在設備上並使用硬編碼引用(即/Storage/emulated/0/Android/data/Report_2.html)時,我已經取得了成功。 wbBrowser.getTitle()在設備上運行時爲空/「」。儘管當這行代碼在其他地方時,它變成了:頁面。 Report_2.html的HTML是;

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test Page</title> 
</head> 
<body> 
    <h1>Hello World</h1> 
</body> 
</html> 
+0

它看起來像你的HTML文件是無效的,並且缺少html標籤。移動瀏覽器對有效的html非常敏感...... –

+0

道歉,這是手工從文件手中複製的。真實的文件是有效的。我編輯了答案來反映這一點。 –

+0

當你寫'[文件夾名稱]'時,你不會真正使用'[文件夾名稱]'吧?您使用純粹字母數字的有效名稱嗎? –

回答

1

幾天後,我意識到,setURL(),我用/pathname,這沒有對setURL()工作,但對setPage()沒有當我從文件中讀取的HTML需要的file://pathname格式的路徑。這是一個用戶錯誤。

0

這應該在設備上工作,但可能在模擬器上指向不正確。

它應該指向模擬器內的路徑是file://home/appName/這應該工作得很好。我建議將URL設置爲一個文件,而不是設置HTML,這將允許您輕鬆添加圖像,CSS文件等,更不用說它可能會更快。

+0

Hi @Shai,謝謝你的迴應。我今天一直在研究這個應用程序,並發現當使用fs.getAppHomePath()而不是「file:// home/[appName]」時,模擬器指向「file:// home /」,但它正在存儲並正確讀取HTML文件。儘管路徑是相同的,setURL()並沒有在模擬器上顯示任何有趣的內容。 –

+0

...當應用程序在Android設備上運行時,它指向它的路徑**/data/data/[com.myCompany.myApp] **,它不是設備上存在的路徑。因此,當我嘗試從設備讀取文件時,遇到I/O錯誤,所以我認爲你是正確的,它是一個文件路徑錯誤。要添加,我使用'Util.downloadUrlToFile(serverFile,phoneFile,true);'在其中phoneFile路徑用'getAppHomePath()'函數設置的地方下載文件。 –

+0

您應該始終使用'getAppHome'方法構建路徑並有效地忽略URL的外觀。 –