OS.创建和OS.OPEN不与Gomobile合作并反应天然


package component
import (
    "encoding/json"
    "io/ioutil"
    "os"
)

type LastComponent struct {
    Name string
}
const fname = "componentfiles"

func Persist(comp string) string {
    lcomp := LastComponent{Name: comp}
    b, err := json.Marshal(lcomp)
    if err != nil {
        return "err-MARSHAL"
    }
    file, err := os.Create(fname)
    if err != nil {
        return "err-CREATE-FILE"
    }
    defer file.Close()
    _, err = file.Write(b)
    if err != nil {
        return "err-FILE-WRITE-PROB"
    }
    return ""
}
func Component() string {
    f, err := os.Open(fname)
    if err != nil {
        return "err-FILE-NOT-OPEN"
    }
    defer f.Close()
    b, err := ioutil.ReadAll(f)
    if err != nil {
        return ""
    }
    var v LastComponent
    json.Unmarshal(b, v)
    return v.Name
}

}

上面的代码工作正常,代码的JavaScript侧也是如此。我在JavaScript中不断收到err-CREATE-FILE。因此os.Createos.Open无法正常工作。

尽管它是内部存储,但不需要权限,但是我也打开了清单文件中的权限,但无用。

使用Gomobile在Android中使用gomobile时使用gomobile的 OpenCreate文件的正确方法是什么?

更新:

adb logcat中,我一直在整个地方

E/Vold ( 276): Failed to find mounted volume for /storage/sdcard1/Android/data/com.gotest/cache/

,因此,如果您将其作为参数传递给它,那么您应该取得成功 - 以下内容对我有用:

GO:

func Component(folderPath string) string {
    f, err := os.Open(path.Join(folderPath, fname)) 
    ...

java:

Component.Component(getApplicationContext().getFilesDir().getAbsolutePath())

另外,您可以使用getExternalStorageDirectory().getAbsolutePath()之类的东西。他们的关键是,您需要在某个位置上获取该流程/用户可写的存储。

相关内容

  • 没有找到相关文章

最新更新