1
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 方面也是如此。我一直err-CREATE-FILE在我的 javascript 中接收。所以os.Createos.Open没有按预期工作。

虽然是内部存储,不需要权限,但是我也在manifest文件中开启了权限,但是没有用。

OpenCreateReact Native 一起使用时,使用 gomobile 在 android 中使用文件的正确方法是什么?

更新:

adb logcat, 我 一直 得到 这个 到处

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

4

1 回答 1

0

因此,如果您将其作为参数传递,您应该会取得一些成功 - 类似以下内容对我有用:

去:

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

爪哇:

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

或者,您可以使用类似getExternalStorageDirectory().getAbsolutePath(). 他们的关键是您需要在存储方面获得您的进程/用户可写的地方。

于 2017-11-11T14:28:38.417 回答