Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在小部件和活动之间共享私有文件?_Java_Android_File_Widget - Fatal编程技术网

Java 如何在小部件和活动之间共享私有文件?

Java 如何在小部件和活动之间共享私有文件?,java,android,file,widget,Java,Android,File,Widget,我知道我可以在活动中使用getFilesDir()和文件名来保存/读取文件。但是,当我试图从小部件中调用getFileDir()时,我得到了一个错误。我希望能够从小部件和活动访问相同的文本文件 实现这一点的最简单方法是什么?您可以从任何上下文中使用getFilesDir(),以便从中保存/读取文件 编辑: 必须从扩展类并使用其上下文: public class App extends Application{ private static Context mContext;

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


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

您可以从任何
上下文中使用
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?”时,谢谢!!!现在一切正常。