使用gomobile

时间:2017-08-28 18:42:22

标签: android go webview android-webview gomobile

我有一个嵌入gomobile的{​​{1}}原生Android应用。这个设置工作得很好,我甚至设法使用gorilla mux路由器,但我也想使用webview模板引擎,当我尝试解析模板html文件时遇到问题。

我的pongo2文件中有以下行:

./app/build.gradle

我将我的html文件放在这里,我尝试在索引路径上解析:android { sourceSets { main { assets.srcDirs = ['assets'] } } }

./app/src/main/assets/views/index.html

此设置没有func index(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html; charset=utf-8") //res, err := http.Get("https://google.com") res, err := http.Get("file:///android_asset/views/index.html") if err != nil { fmt.Fprintf(w, "could not execute: %v\n", err) } text, err := ioutil.ReadAll(res.Body) res.Body.Close() if err != nil { fmt.Fprintf(w, "could not execute: %v\n", err) } fmt.Fprintf(w, "%s", text) } 渲染,仅用于更简单的示例。从谷歌解析html文件工作,并在我打开它时显示在应用程序中。但是当我尝试解析pongo2文件时,我收到以下错误:

enter image description here

修改

我在godoc中发现asset.Open,所以我修改了我的代码:

file:///android_asset/views/index.html

我仍然手动将我的模板文件复制到func index(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html; charset=utf-8") a, err := asset.Open("views/index.html") if err != nil { fmt.Fprintf(w, "could not execute: %v\n", err) } defer a.Close() fmt.Fprintf(w, "File contents: %s\n", a) } 文件夹,但最终结果是一样的。

EDIT2:

我意识到问题是当我将模板文件复制到./app/src/main/assets/views/index.html文件夹时,./app/src/main/assets/views文件夹中没有任何文件(只有./app/src/main/assets子文件夹),因此这些由于资产没有复制到apk中。所以现在我直接在assets文件夹中复制我的文件,我的index.html位置是views。这样我的模板就会被复制到apk中......现在我得到了以下屏幕。我想我应该以某种方式解码文本:

enter image description here

嵌入单个html文件的解决方案:

我必须使用./app/src/main/assets/index.html,因为ioutil.ReadAll已实现为以下界面:

asset.File

所以解析html文件的最终代码是:

type File interface {
    io.ReadSeeker
    io.Closer
}

由此产生的结果:

enter image description here

但是,这仍然无法解决为什么引用func index(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html; charset=utf-8") a, err := asset.Open("index.html") if err != nil { fmt.Fprintf(w, "could not execute: %v\n", err) } defer a.Close() b, err := ioutil.ReadAll(a) if err != nil { fmt.Fprintf(w, "could not execute: %v\n", err) } fmt.Fprintf(w, "File contents: %s\n", b) } 无法正常工作的文件,这对于像css / js这样的静态文件是必需的,所以问题仍然存在。也许从java代码服务资产?

0 个答案:

没有答案