android - 尝试在空对象引用上调用虚方法 - 全局变量类

标签 android

我正在学习 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/

相关文章:

java - 更新 List<Object> 中的对象仅影响特定字段。 (合并)

如果实现 RTL,android Material Edittext 错误出现在左侧

java - Android ExoPlayer 已弃用,无法流式传输视频

android - 将两个 ConstraintLayout 带到 Button 前面

android - Xamarin PickerRenderer - 获取微调器?

java - 使用 Android 触摸屏捕捉游戏(如《愤怒的小鸟》)的 Action 或击键

android - 如何在android编程中使用jsoup从html获取此脚本

android - 如何将 Twitter 集成到我的应用程序中以进行登录和发推 - Android

android - 加载设备灰显 (Android Studio) 在物理设备上测试应用程序

java - Android studio 删除了我的mapsactivity.java 如何恢复?