Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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
为什么这个Android FileOutputStream抛出NullPointerException?_Android_Nullpointerexception_Fileoutputstream - Fatal编程技术网

为什么这个Android FileOutputStream抛出NullPointerException?

为什么这个Android FileOutputStream抛出NullPointerException?,android,nullpointerexception,fileoutputstream,Android,Nullpointerexception,Fileoutputstream,似乎没有任何需要为文件io设置的Android清单权限 public class Device extends Activity { private static final Configuration config = new Configuration(); ... private boolean applyMenuChoice(MenuItem item) { switch (item.getItemId()) { ...

似乎没有任何需要为文件io设置的Android清单权限

public class Device extends Activity {
    private static final Configuration config = new Configuration();
    ...
    private boolean applyMenuChoice(MenuItem item) {
        switch (item.getItemId()) {
        ...
        case R.id.menuSave:
            ...
            configuration.modify(name, to, from, user);
            configuration.write();
            ...

public class Configuration extends Activity {
    private final static String CONFIG = "config.txt";
    private static StringBuilder config = new StringBuilder();
    ...
    public void write() {
        try {
            FileOutputStream fos = openFileOutput(CONFIG, Context.MODE_PRIVATE);
            fos.write(config.toString().getBytes());
            ...

你想把文件写到哪里?如果它位于设备的SD卡上,则需要在android清单中设置WRITE_EXTERNAL_STORAGE-permission。您可能还需要设置路径,而不仅仅是使用文件名。

您要将文件写入哪里?如果它位于设备的SD卡上,则需要在android清单中设置WRITE_EXTERNAL_STORAGE-permission。您可能还需要设置路径,而不仅仅是使用文件名。

用正确的方法替换活动的非法实例化解决了此问题。非常感谢(再次)Falmari。

用正确的方法替换活动的非法实例化解决了此问题。非常感谢(再次)Falmari。

在这种情况下,当指针不正确时,会引发异常。您可能像使用常规对象一样使用其ctor创建活动,而不是使用意图的开始活动。在这种情况下,不要调用openFileOutput或this.openFileOutput,但应将所处的上下文作为参数发送到write()函数,并使用此上下文,即:

write(Context context)
{
     context.openFileOutput(...)
     ...

当此指针不正确时,将在此场景中引发异常。您可能像使用常规对象一样使用其ctor创建活动,而不是使用意图的开始活动。在这种情况下,不要调用openFileOutput或this.openFileOutput,但应将所处的上下文作为参数发送到write()函数,并使用此上下文,即:

write(Context context)
{
     context.openFileOutput(...)
     ...

调用write方法时?write()位于类配置中(请参阅添加到原始问题中的代码段),并在更改配置时由类设备中的applyMenuChoice()调用。调试器用于验证在实际尝试写入之前是否按预期填充了配置,但在尝试实际写入之前(在openFileOutput)会引发异常。在applyMenuChoice中使用openFileOutput是否非法?您的代码非常非法。你不能直接用new()实例化一个活动(我想你可以,但你不应该这么做)。如果您想在另一个活动中写入一个活动中的数据,您很可能必须通过服务传递数据,或者在设备中生成另一个write()方法如果您可以发布异常stacktrace,这将有助于调试。Falmari:非常感谢。这不是我第一次在Android/Java中做一些“非常非法”的事情。我认为配置不需要是活动,因此当我删除“扩展活动”时,NullPointerException将替换为FileNotFoundException。调试器抱怨这是一个“只读文件系统”。这是一个不同的问题,所以我将看看我能做多少。当调用write方法时?write()在类配置中(请参阅添加到原始问题中的代码片段),并且在对配置进行更改时由类设备中的applyMenuChoice()调用。调试器用于验证在实际尝试写入之前是否按预期填充了配置,但在尝试实际写入之前(在openFileOutput)会引发异常。在applyMenuChoice中使用openFileOutput是否非法?您的代码非常非法。你不能直接用new()实例化一个活动(我想你可以,但你不应该这么做)。如果您想在另一个活动中写入一个活动中的数据,您很可能必须通过服务传递数据,或者在设备中生成另一个write()方法如果您可以发布异常stacktrace,这将有助于调试。Falmari:非常感谢。这不是我第一次在Android/Java中做一些“非常非法”的事情。我认为配置不需要是活动,因此当我删除“扩展活动”时,NullPointerException将替换为FileNotFoundException。调试器的抱怨是这是一个“只读文件系统”。这是一个不同的问题,所以我会看看我能做多少。这是一个小文件。我没有尝试写入外部存储,而且我相当确定openFileOutput不接受文件路径。我在清单中添加了“写入外部存储”权限,以查看它是否有帮助,但它没有,我不理解为什么这个答案在没有(至少在本例中没有)的情况下被标记为有用。它是一个小文件。我没有尝试写入外部存储,而且我相当肯定openFileOutput不接受文件路径。我在清单中添加了“写入外部存储”权限,以查看它是否有帮助,但它没有,我不明白为什么这个答案被标记为有用,如果它不有用(至少在本例中没有)。