Java 如何在小部件和活动之间共享私有文件?
我知道我可以在活动中使用getFilesDir()和文件名来保存/读取文件。但是,当我试图从小部件中调用getFileDir()时,我得到了一个错误。我希望能够从小部件和活动访问相同的文本文件Java 如何在小部件和活动之间共享私有文件?,java,android,file,widget,Java,Android,File,Widget,我知道我可以在活动中使用getFilesDir()和文件名来保存/读取文件。但是,当我试图从小部件中调用getFileDir()时,我得到了一个错误。我希望能够从小部件和活动访问相同的文本文件 实现这一点的最简单方法是什么?您可以从任何上下文中使用getFilesDir(),以便从中保存/读取文件 编辑: 必须从扩展类并使用其上下文: public class App extends Application{ private static Context mContext;
实现这一点的最简单方法是什么?您可以从任何
上下文中使用getFilesDir()
,以便从中保存/读取文件
编辑:
必须从扩展类并使用其上下文:
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"
注意:App是扩展的类的名称
现在,您可以使用它的上下文进行保存\读取:
App.getContext().getFilesDir();
您可以从任何上下文中使用getFilesDir()
,这样您就可以从中保存/读取文件
编辑:
必须从扩展类并使用其上下文:
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"
注意:App是扩展的类的名称
现在,您可以使用它的上下文进行保存\读取:
App.getContext().getFilesDir();
您可以为此目的使用。下面是一个简短的例子:
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);
更新:很抱歉,您忘记了要在小部件中使用它。您可以从以下位置尝试此代码:
警告:请勿按原样使用此代码。您应该使用适当的代码来捕获错误和边缘情况。您可以用于此目的。下面是一个简短的例子:
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);
更新:很抱歉,您忘记了要在小部件中使用它。您可以从以下位置尝试此代码:
警告:请勿按原样使用此代码。您应该使用适当的代码来捕获错误和边缘情况。显示您的代码和堆栈…显示您的代码和堆栈…我刚刚尝试过。。。当使用“Context Context=getApplicationContext();”时,我得到“…对于类型小部件是未定义的”。我错过了什么?我只是试着。。。当使用“Context Context=getApplicationContext();”时,我得到“…对于类型小部件是未定义的”。我错过了什么?愚蠢的我!我刚意识到onUpdate传递了一个上下文。。。你的回答让我意识到,当我想到“好吧,我从哪里获取McContext?”时,谢谢!!!现在很好用。我真傻!我刚意识到onUpdate传递了一个上下文。。。你的回答让我意识到,当我想到“好吧,我从哪里获取McContext?”时,谢谢!!!现在一切正常。