有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android单例

我对安卓 studio中创建的应用程序中的singleton有一个问题

Class MyApplication is created :


    public class MyApplication extends Application {  // code - freeCodeCamp.org 
    
        private static MyApplication singleton;
        private List<Location> myLocations;
    
    
        public List<Location> getMyLocations() {
            return myLocations;
        }
    
        public void setMyLocations(List<Location> myLocations) {
            this.myLocations = myLocations;
        }
    
        public MyApplication getInstance(){
            return singleton;
        }
    
        public void OnCreate() {
            super.onCreate();
            singleton = this;
            myLocations = new ArrayList<>();
        }
    }

当我在主活动中调用MyApplication时,它会给出一个错误,具体为null:

    MyApplication myApplication = (MyApplication)getApplicationContext();
    savedLocations = myApplication.getMyLocations();
    savedLocations.add(currentLocation);

currentLocation具有有效的位置值。 有什么提示吗?谢谢


共 (2) 个答案

  1. # 1 楼答案

    您必须像Ernest所说的那样使用@Override public void onCreate(),并编写此代码以获取应用程序实例并使用它

    import MyApplication;
    
    public OtherClass {
    
        public void otherMethod() {
            MyApplication myApp = MyApplication.getInstance();
            savedLocations = myApp.getMyLocations();
            savedLocations.add(currentLocation);
        }
    
    }
    
  2. # 2 楼答案

    myLocations为空,因为您拼错了onCreate方法签名,并且它实际上从未被调用

    您应该更改此选项:

    public void OnCreate() {
    

    为此:

    @Override
    public void onCreate() {
    

    这是你问题的解决办法,但老实说,你不应该那样做。请阅读应用程序架构,了解如何定义数据的范围。在android应用程序类中使用单例数组在99.99%的情况下是错误的答案