2013-03-23 63 views
0

我知道我可以在活動和文件名中使用getFilesDir()來保存/讀取文件。但是,當我嘗試從窗口小部件中調用getFilesDir()時,出現錯誤。我希望能夠從小部件和活動中訪問相同的文本文件。如何在小部件和活動之間共享私人文件?

實現該目標的最簡單方法是什麼?

+1

什麼是錯誤? – 2013-03-23 17:33:23

+0

顯示你的代碼,以及你的堆棧... – duggu 2013-03-23 17:37:35

回答

1

您可以使用AssetManager用於此目的。這裏有一個簡單的例子:

AssetManager assetManager = getAssets(); 
String[] files = assetManager.list("Files"); 
InputStream input = assetManager.open("helloworld.txt"); 
int size = input.available(); 
byte[] buffer = new byte[size]; 
input.read(buffer); 
input.close(); 
String text = new String(buffer); 

更新:對不起,忘了,你想過要在窗口小部件使用。你可以從this answer試試這個代碼:

InputStream is = mContext.getAssets().open(someFile); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8")); 

警告:不要因爲是使用此代碼。你應該使用正確的代碼來捕捉錯誤和邊緣情況。

+0

傻我!我剛剛意識到onUpdate通過了一個Context ...你的回答讓我意識到,當我想到「好吧,我從哪裏獲取mContext?」謝謝!!!現在工作得很好。 – PawelP 2013-03-23 18:12:12

2

您可以使用getFilesDir()從任何Context因此,您可以保存\從Application讀取您的文件。

編輯:

你必須從Application擴展類,並使用它的上下文:

public class App extends Application{ 

    private static Context mContext; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mContext = this; 
    } 

    public static Context getContext(){ 
     return mContext; 
    } 
} 

然後在你的應用程序的manifest,設置Application標籤的name屬性與類名,例如:

android:name="App" 

注意:應用程序是名稱延伸爲Application

現在你可以使用它的上下文做保存\讀:

App.getContext().getFilesDir(); 
+0

我剛剛嘗試過......當使用「上下文環境= getApplicationContext();」時,我得到「...未定義類型小部件」。我錯過了什麼? – PawelP 2013-03-23 18:02:07

+0

@PawełParadowski請參閱我的編輯。 – hasanghaforian 2013-03-23 18:13:11