顯示具有 webview 標籤的文章。 顯示所有文章
顯示具有 webview 標籤的文章。 顯示所有文章

星期五, 11月 25, 2011

WebView裡$.parseJSON() fail

查了好久。我是先用setWebChromeClient()去處理WebView的onConsoleMessage() callback,將console.log()的輸出導向到Android的LogCat以便於觀察。先懷疑jQuery是不是有問題,就先拿另外一個 變數放確定可以的JSON字串丟進去parse,沒問題。那我就懷疑從addJavascriptInterface()那兒來的物件的傳回值了,直接複 製傳回結果,放到JavaScript裡當作一個字串,parse的結果,是沒問題的。那?會是型態的問題嗎?用typeof()檢查了一下,發現是 object,而非字串,真相大白。我先試著把一個空字串加到傳回值裡,然後就可以得到字串,也就可以正常parse了。再查了一下,JavaScript是有轉換函式的,叫String(),試了一下,也可以把型態是object的傳回值轉為字串。至此,就解決了parseJSON()的問題。

星期四, 11月 24, 2011

WebView

畫面如果用Android裡的xml,光想,就讓我頭痛。還是用HTML來的方便,而且現在有HTML5,Android也有WebView,再加上之前敗了這本建構Android應用程式,我想這樣應該會方便很多。可是用HTML,就得用JavaScript,也需要從Android程式那邊溝通,就研究了一下。
Using WebViews裡提供的範例,就有講其中的關鍵了,就是使用WebView提供的addJavascriptInterface(),這可以把Java的物件加到JavaScript runtime裡去,這樣JavaScript就可以使用這個物件。可以呼叫之後,那麼資料該怎麼傳遞呢??這牽涉到轉換的問題,而且Android只允許傳遞int、String等一些基礎類別,而不允許使用自訂類別,這就糟了。還好,這篇Working with Android addJavascriptInterface就有討論到這個問題,他的結論是使用JSON字串,這看來是最簡便的方法。JavaScript可以使用jQuery提供的parseJSON()與toJSON()來從字串轉成物件,或從物件轉為字串,而Java則可以用jackson來轉換。Build a Contacts Application With jQuery Mobile & the Android SDK這篇是更完整的使用範例。
Using WebViews裡另外有提到WebView的setWebViewClient,這個其實是WebView的callback,讓你可以在WebView遇到一些特定狀況的時候,作一些處理。詳細的說明要參照WebViewClient這邊。
如果嫌麻煩的話,是參考書裡的PhoneGap就好,書上介紹的步驟就只要寫HTML+CSS+JavaScript就好,不用特別再寫Java的部份,也不用裝eclipse,最後就用ant,就可以build出apk。