我知道我可以在活動和文件名中使用getFilesDir()來保存/讀取文件。但是,當我嘗試從窗口小部件中調用getFilesDir()時,出現錯誤。我希望能夠從小部件和活動中訪問相同的文本文件。如何在小部件和活動之間共享私人文件?
實現該目標的最簡單方法是什麼?
我知道我可以在活動和文件名中使用getFilesDir()來保存/讀取文件。但是,當我嘗試從窗口小部件中調用getFilesDir()時,出現錯誤。我希望能夠從小部件和活動中訪問相同的文本文件。如何在小部件和活動之間共享私人文件?
實現該目標的最簡單方法是什麼?
您可以使用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"));
警告:不要因爲是使用此代碼。你應該使用正確的代碼來捕捉錯誤和邊緣情況。
傻我!我剛剛意識到onUpdate通過了一個Context ...你的回答讓我意識到,當我想到「好吧,我從哪裏獲取mContext?」謝謝!!!現在工作得很好。 – PawelP 2013-03-23 18:12:12
您可以使用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();
我剛剛嘗試過......當使用「上下文環境= getApplicationContext();」時,我得到「...未定義類型小部件」。我錯過了什麼? – PawelP 2013-03-23 18:02:07
@PawełParadowski請參閱我的編輯。 – hasanghaforian 2013-03-23 18:13:11
什麼是錯誤? – 2013-03-23 17:33:23
顯示你的代碼,以及你的堆棧... – duggu 2013-03-23 17:37:35