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


} 

上面的代碼工作正常,JavaScript代碼也是如此。我一直收到我的JavaScript裏面的err-CREATE-FILE。所以os.Createos.Open不按預期工作。os.Create和os.Open不能與gomobile一起工作並對原生作出反應

儘管它是內部存儲,但不需要權限,但我也打開了清單文件中的權限,但無濟於事。

什麼可能是正確的方式來OpenCreate文件在android中使用gomobile時使用一邊React Native?

更新:

adb logcat,我老覺得所有的地方

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

+0

os.Create的錯誤是什麼?你有沒有嘗試使用絕對路徑保存 - 像「/ sdcard/myfile」? – Steve101

+0

是否可以在Java/ObjC/Swift中打開該文件? –

回答

0

所以,你應該有一些成功,如果你通過這個作爲一個參數 - 有點像以下是爲我工作:

去:

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

的Java:

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

或者,你可以使用類似getExternalStorageDirectory().getAbsolutePath()。他們的關鍵在於您需要獲得可由您的流程/用戶寫入的storagewise方式。

相關問題