Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 全局变量使我为null_Java_Android - Fatal编程技术网

Java 全局变量使我为null

Java 全局变量使我为null,java,android,Java,Android,我想在我的项目中使用全局变量,所以我只需要一个类,在这个类中我可以轻松地设置和获取任何变量数据 像这样: 但是当我初始化它时,我得到一个空异常。 我已经通过创建Glob_变量类的对象初始化了它 比如: 当我调用第二个活动时,当我跟踪时,得到了null变量。 我打过这样的电话: Glob_variable g = new Glob_variable(); g.getPath(); 那么你能告诉我在哪一点上我犯了错误吗?Glob\u variable g=新的Glob\u variable;将创建

我想在我的项目中使用全局变量,所以我只需要一个类,在这个类中我可以轻松地设置和获取任何变量数据

像这样:

但是当我初始化它时,我得到一个空异常。 我已经通过创建Glob_变量类的对象初始化了它

比如:

当我调用第二个活动时,当我跟踪时,得到了null变量。 我打过这样的电话:

Glob_variable g = new Glob_variable();
g.getPath();
那么你能告诉我在哪一点上我犯了错误吗?

Glob\u variable g=新的Glob\u variable;将创建新实例,使用静态变量或应用单音

单音:

Glob_变量g=新的Glob_变量;将创建新实例,使用静态变量或应用单音

单音:


我认为这是因为您正在从Glob_变量类的另一个实例调用get方法

Glob_variable g = new Glob_variable();
        g.setPath("asdasd");
        String path = g.getPath();
以上代码是有效的。但是,如果在一个类中使用了上面的代码之后在另一个类/活动中使用了下面的代码,那么它是无效的,因为您已经在另一个类/活动中创建了Glob_变量的另一个实例

Glob_variable g = new Glob_variable();
String path = g.getPath();
试着在你的代码中遵循单吨模式

public class Glob_variable 
{
     private Glob_variable GVariableClass;
     private static String Path;
     private Glob_variable()
     {
          GVariableClass = this;
     }

     public static Glob_variable getInstance()
     {
           if ( GVariableClass == null )
           {
                 GVariableClass = new Glob_variable();
           }
           return GVariableClass;
     }

        /**********************************************/
        public void setPath(String Path) {
            this.Path = Path;
        }

        public String getPath() {
            return Path;
        }
        /**********************************************/

    }

我认为这是因为您正在从Glob_变量类的另一个实例调用get方法

Glob_variable g = new Glob_variable();
        g.setPath("asdasd");
        String path = g.getPath();
以上代码是有效的。但是,如果在一个类中使用了上面的代码之后在另一个类/活动中使用了下面的代码,那么它是无效的,因为您已经在另一个类/活动中创建了Glob_变量的另一个实例

Glob_variable g = new Glob_variable();
String path = g.getPath();
试着在你的代码中遵循单吨模式

public class Glob_variable 
{
     private Glob_variable GVariableClass;
     private static String Path;
     private Glob_variable()
     {
          GVariableClass = this;
     }

     public static Glob_variable getInstance()
     {
           if ( GVariableClass == null )
           {
                 GVariableClass = new Glob_variable();
           }
           return GVariableClass;
     }

        /**********************************************/
        public void setPath(String Path) {
            this.Path = Path;
        }

        public String getPath() {
            return Path;
        }
        /**********************************************/

    }

嗯,这里有很多答案,但我想你和我一样,也来自VBor类似的世界。我看到你所有的变量都是用大写字母声明的

您必须了解,与VB不同,Java中没有真正的全局访问。当您使用“new”运算符时,将创建该类的新实例,并根据构造函数约定重新分配所有值。所以,从头开始实例化一个用于存储全局值的变量

第二种选择是静态变量,但我发现您在使用它们时也有困难。在这里,我有一种强烈的感觉,有时在赋值之前使用静态变量。你必须确保你的二传手总是在你的接球手之前被召唤。您甚至可以通过如下自定义异常

public class Glob_variable {


    static String Path = "";

    /**********************************************/
    public static void setPath(String Path) {
        Glob_variable.Path = Path;
    }

    public static String getPath() throws Exception{
        if("".equals(Path)){
           throw new Exception("Variable no inited yet")
        }
        return Path;
    }
    /**********************************************/


}
使用Glob_variable.getPath等访问变量。还可以尝试以下Java命名约定,从长远来看,这将对您有所帮助:

我发现下面的链接对理解Singlton非常有用,请阅读


全局值是常量还是必须在运行时设置?如果它们是常量,那么我会说你创建了一个带有最终变量的接口,并在代码中使用它们。

好吧,这里有很多答案,但我想你和我一样,也来自VBor类似的世界。我看到你所有的变量都是用大写字母声明的

您必须了解,与VB不同,Java中没有真正的全局访问。当您使用“new”运算符时,将创建该类的新实例,并根据构造函数约定重新分配所有值。所以,从头开始实例化一个用于存储全局值的变量

第二种选择是静态变量,但我发现您在使用它们时也有困难。在这里,我有一种强烈的感觉,有时在赋值之前使用静态变量。你必须确保你的二传手总是在你的接球手之前被召唤。您甚至可以通过如下自定义异常

public class Glob_variable {


    static String Path = "";

    /**********************************************/
    public static void setPath(String Path) {
        Glob_variable.Path = Path;
    }

    public static String getPath() throws Exception{
        if("".equals(Path)){
           throw new Exception("Variable no inited yet")
        }
        return Path;
    }
    /**********************************************/


}
使用Glob_variable.getPath等访问变量。还可以尝试以下Java命名约定,从长远来看,这将对您有所帮助:

我发现下面的链接对理解Singlton非常有用,请阅读


全局值是常量还是必须在运行时设置?如果它们是常量,那么我会说您创建了一个带有最终变量的接口,并在代码中使用它们。

我之前使用过静态变量,但我有些时候没有获得成功。如果是静态变量,它总是一样的,如果不喜欢静态变量,则使用单例静态变量应该可以工作。如果不成功,可能是因为其他错误。请参阅,因此只有一个Glob_变量实例会被使用。我之前使用过静态变量,但我没有获得成功。如果它是静态的,它总是得到相同的结果。如果不喜欢静态的,则使用单例静态变量应该可以工作。如果不成功,可能是因为其他错误。请参阅,因此只会使用Glob_变量的一个实例。可能是因为我在第二个活动中调用get方法而引发此问题。使用Glob_变量g=新Glob_变量;g、 getPath;所以可能是一次创建一个新实例……不是吗?你能告诉我新的字符串变量machinename有额外的过程吗?或者和它一样,这个问题可能是因为我在第二个activity.with using Glob_variable g=new中调用get方法而引起的
Glob_变量;g、 getPath;所以可能是一次创建一个新实例……不是吗?你能告诉我新的字符串变量machinename有额外的过程吗?还是和现在一样