我正在学习 MVC。我的项目有很多变量。所以我为他们创建了一个名为 MainVariables 的新类。
public class MainVariables {
private String mPictureDirectory;
private String mNameOfThePictureFile;
private String mFullPathPicture;
private double mLongitude;
private double mLatitude;
private String mAddress;
private String mCity;
private String mState;
private String mCountry;
private String mPostalCode;
private String mKnownName;
private String mDescription;
private String mSolicitationType;
...
...
其余部分由每个变量的自动 getter 和 setter 组成。
我在跨应用程序访问和转换这些变量时遇到问题。
我尝试通过在其他文件中强制转换以下内容来访问它:
private MainVariables mMainVariables;
上面的代码抛出错误Attempt to invoke virtual method on a null object reference
然后我尝试了以下方法:
private MainVariables mMainVariables = new MainVariables();
现在,这确实有效。仅在它使用的文件中。例如,我在“SolicitationFragment”中设置变量,当我尝试在“PostFragment”上访问它时,我得到一个空结果。
那是因为我必须在每个文件上初始化 MainVariables。
我怎样才能解决这个问题并能够全局访问我的变量?
最佳答案
如果您不打算更改它们,请将变量设为静态或最终。这样你就不必创建一个新的实例并且可以立即调用 MainVariables.mPictureDirectory
public class MainVariables {
public static String mPictureDirectory;
}
另一种选择是单例模式,这样你只创建一个对象的一个实例并且仍然可以使用 getter 和 setter
public class MainVariables {
private static MainVariables mInstance = null;
private String mString;
private MainVariables(){
mString = "Hello";
}
public static MainVariables getInstance(){
if(mInstance == null)
{
synchronized (MainVariables.class) {
if (mInstance== null) {
mInstance= new MainVariables();
}
}
return mInstance;
}
public String getString(){
return this.mString;
}
public void setString(String value){
mString = value;
}
}
在您的 MainActivity 中,您可以声明一个字段
MainVariables mainVariables = MainVariables.getInstance()
并调用
mainVariables.[METHOD]
来自 MainActivity 中的基本上任何地方
关于android - 尝试在空对象引用上调用虚方法 - 全局变量类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43814137/