我知道我可以在活动中使用 getFilesDir() 和文件名来保存/读取文件。但是,当我尝试从小部件中调用 getFilesDir() 时,出现错误。我希望能够从小部件和活动中访问相同的文本文件。
实现这一目标的最简单方法是什么?
您可以getFilesDir()
从任何使用因此您可以从ApplicationContext
保存\读取您的文件。
编辑:
您必须从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
您的应用程序中,使用该类的名称设置标签的name
属性Application
,例如:
android:name="App"
注意: App 是扩展Application的类的名称。
现在您可以使用它的上下文来保存\读取:
App.getContext().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);
更新:抱歉,忘记了您希望在小部件中使用它。您可以从此答案中尝试此代码:
InputStream is = mContext.getAssets().open(someFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
警告:不要按原样使用此代码。您应该使用正确的代码来捕获错误和边缘情况。