我知道我可以在活动和文件名中使用getFilesDir()来保存/读取文件。但是,当我尝试从小部件中调用getFilesDir()时,我收到错误。我希望能够从小部件和活动中访问相同的文本文件。
实现这一目标的最简单方法是什么?
答案 0 :(得分: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
中,将name
标记的Application
属性设置为该类的名称,例如:
android:name="App"
注意:App是扩展Application的该类的名称。
现在您可以使用它的上下文来执行save \ read:
App.getContext().getFilesDir();
答案 1 :(得分: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"));
警告:请勿按原样使用此代码。你应该使用适当的代码来捕获错误和边缘情况。