os.Create и 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. Я продолжаю получать err-CREATE-FILE
внутри моего JavaScript Так os.Create
а также os.Open
не работают, как ожидалось.
Хотя это внутреннее хранилище, разрешения не требуются, но я также включил разрешения в файле манифеста, но безрезультатно.
Что может быть правильным способом Open
а также Create
файлы в Android с помощью Gomobile при использовании вдоль стороны React Native?
Обновить:
В adb logcat
Я продолжаю получать это повсюду
E/Vold ( 276): Failed to find mounted volume for /storage/sdcard1/Android/data/com.gotest/cache/
1 ответ
Так что вы должны иметь некоторый успех, если вы передадите это как параметр - у меня работает что-то вроде следующего:
идти:
func Component(folderPath string) string {
f, err := os.Open(path.Join(folderPath, fname))
...
Джава:
Component.Component(getApplicationContext().getFilesDir().getAbsolutePath())
В качестве альтернативы, вы можете использовать что-то вроде getExternalStorageDirectory().getAbsolutePath()
, Ключевым моментом является то, что вам нужно найти место для хранения, доступное для записи вашему процессу / пользователю.