2017-02-21 1 views
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 
} 


} 

Le code ci-dessus fonctionne très bien, tout comme le côté javascript du code. Je continue de recevoir err-CREATE-FILE dans mon javascript. Donc os.Create et os.Open ne fonctionnent pas comme prévu.os.Create et os.Open ne fonctionne pas avec gomobile et réagit natif

Bien qu'il s'agisse d'un stockage interne, les autorisations ne sont pas requises, mais j'ai également activé les autorisations dans le fichier manifeste, mais sans succès.

Quelle pourrait être la bonne façon de Open et Create fichiers dans android en utilisant gomobile lors de l'utilisation côté React Native?

Mise à jour:

En adb logcat, je continue à obtenir tout cela sur la place

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

+0

Quelle est l'erreur de os.Create? Avez-vous essayé d'enregistrer en utilisant un chemin absolu - quelque chose comme "/ sdcard/myfile"? – Steve101

+0

êtes-vous capable d'ouvrir le fichier dans Java/ObjC/Swift? –

Répondre

0

donc vous devriez avoir un certain succès si vous passez cela en tant que paramètre - quelque chose comme suit travaille pour moi:

aller:

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

Java:

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

Sinon, vous pouvez utiliser quelque chose comme getExternalStorageDirectory().getAbsolutePath(). Leur clé est que vous devez obtenir un emplacement de stockage accessible en écriture par votre processus/utilisateur.