Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.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 在首选项中设置之前未声明变量_Android_Global Variables_Sharedpreferences - Fatal编程技术网

Android 在首选项中设置之前未声明变量

Android 在首选项中设置之前未声明变量,android,global-variables,sharedpreferences,Android,Global Variables,Sharedpreferences,我正在开发一个应用程序,它可以与数据库一起使用,并提供在外部存储上创建备份的选项。应用程序从首选项获取备份目录,但由于在我第一次运行应用程序时未设置备份目录,因此我使用默认路径,只需获取外部存储的路径并在其中创建一个目录即可 对于所有这些,我使用全局字符串值来保持备份路径。但我的问题是——当我第一次运行我的应用程序时,我在onCreate()方法中声明了默认路径。当我尝试将此路径写入日志时,它是有效的。但接下来我有了onClick()方法,在这里我听单击按钮,它调用带有导出/导入选项的对话框。当

我正在开发一个应用程序,它可以与数据库一起使用,并提供在外部存储上创建备份的选项。应用程序从首选项获取备份目录,但由于在我第一次运行应用程序时未设置备份目录,因此我使用默认路径,只需获取外部存储的路径并在其中创建一个目录即可

对于所有这些,我使用全局字符串值来保持备份路径。但我的问题是——当我第一次运行我的应用程序时,我在
onCreate()
方法中声明了默认路径。当我尝试将此路径写入日志时,它是有效的。但接下来我有了
onClick()
方法,在这里我听单击按钮,它调用带有导出/导入选项的对话框。当我尝试从这里将备份路径写入日志时,字符串为空

变量本身不应该成为问题,因为这里有一件有趣的事情——当我转到preferences并从那里设置备份路径(然后以与以前相同的方式保存到string变量)时,我可以突然从
onClick
方法中获取变量,一切正常

为了记录在案,我尝试设置不同的路径,我总是在首选项中选择与我在
onCreate
方法中手动使用的相同的路径

location = PreferenceManager.getDefaultSharedPreferences(this);
if(location.getString("backup_location", "").equals("")) {
    String state = Environment.getExternalStorageState();

    if(Environment.MEDIA_MOUNTED.equals(state)) {
        File file = new File(Environment.getExternalStorageDirectory().toString() + "/simpledbmanager_backup");

        if(!file.exists()) {
            file.mkdirs();
        }

        this.backup = file.getAbsolutePath().toString();
    }
}
else {
    this.backup = location.getString("backup_location", "");
}
有什么想法吗?可能是什么问题?我可以将
onCreate
中使用的备份路径的整个条件也写入
onClick
方法中,这可能会解决这个问题,但我希望避免重复代码,这也确实让我感到不安

编辑:

下面是我在
onCreate
方法中使用的条件代码

location = PreferenceManager.getDefaultSharedPreferences(this);
if(location.getString("backup_location", "").equals("")) {
    String state = Environment.getExternalStorageState();

    if(Environment.MEDIA_MOUNTED.equals(state)) {
        File file = new File(Environment.getExternalStorageDirectory().toString() + "/simpledbmanager_backup");

        if(!file.exists()) {
            file.mkdirs();
        }

        this.backup = file.getAbsolutePath().toString();
    }
}
else {
    this.backup = location.getString("backup_location", "");
}

所以,当您第一次运行程序时,onClick不会返回oncreate中设置的字符串,而是返回正确的sharepreference?第二部分看起来很正常,第一部分可能是因为一个bug。你应该发布你的代码,这样人们可以提供帮助。是的,我意识到在发布代码后,我刚刚添加了代码。你是对的。