0

我知道我可以在活动中使用 getFilesDir() 和文件名来保存/读取文件。但是,当我尝试从小部件中调用 getFilesDir() 时,出现错误。我希望能够从小部件和活动中访问相同的文本文件。

实现这一目标的最简单方法是什么?

4

2 回答 2

2

您可以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();
于 2013-03-23T17:40:07.223 回答
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);

更新:抱歉,忘记了您希望在小部件中使用它。您可以从此答案中尝试此代码:

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

警告:不要按原样使用此代码。您应该使用正确的代码来捕获错误和边缘情况。

于 2013-03-23T17:40:29.270 回答