【问题标题】:My Class in not an enclossing class我的班级不是封闭班级
【发布时间】:2018-05-20 03:23:20
【问题描述】:

所以我有类构造函数:

public class HealthDataStore { // this class is 3rd party api - can't modify
    public HealthDataStore(Context context, HealthDataStore.ConnectionListener listener){ /* bla... */ }

    /* bla... */

    // with Listener Interface:
    public interface ConnectionListener {
        void onConnected();
        void onConnectionFailed(HealthConnectionErrorResult var1);
        void onDisconnected();
    }
}

在我的存储库类中,我有:

public class HealthRepository {
    private string DSConnectionStatus;

    public void connectDataStore(HealthDSConnectionListener listener) {
        mStore = new HealthDataStore(app, listener);
        mStore.connectService();
    }

    // with inner class:
    public class HealthDSConnectionListener implements HealthDataStore.ConnectionListener{
        @Override public void onConnected() { DSConnectionStatus = "Connected"; }

        @Override public void onConnectionFailed(HealthConnectionErrorResult healthConnectionErrorResult) { DSConnectionStatus = "Connection Failed"; }

        @Override public void onDisconnected() { DSConnectionStatus = "Disconnected"; }
    };
}

在我的视图模型类中,我有以下对象:

public class SplashViewModel extends AndroidViewModel {

    public void connectRepoDataStore(){
        // repo is object of class HealthRepository
        repo.connectDataStore(mConnectionListener)
        // other things to do here 
    }

    private final HealthRepository.HealthDSConnectionListener mConnectionListener = new HealthRepository.HealthDSConnectionListener(){
        @Override public void onConnected() {
            super.onConnected(); // i need this super to set DSConnectionStatus value
            // other things to do here 
        }

        @Override public void onConnectionFailed(HealthConnectionErrorResult error) {
            super.onConnectionFailed(error); // i need this super to set DSConnectionStatus value
            // other things to do here 
        }

        @Override public void onDisconnected() {
            super.onDisconnected(); // i need this super to set DSConnectionStatus value
            // other things to do here 
        }
    }

为什么private final HealthRepository.HealthDSConnectionListener mConnectionListener = new HealthRepository.HealthDSConnectionListener() 向我抛出该类未包含类的错误?

那我应该如何实现呢?让我的最终侦听器类能够在 healthrepository 类中设置 DSConnectionStatus?

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您知道必须扩展内部类,请始终尽量避免使用它们。而是使用单独的类,并将外部类与字段交换。如果您需要修改不想公开的私有字段,请创建一个包私有设置器。

    public class HealthRepository {
        private String DSConnectionStatus;
    
        public void connectDataStore(HealthDSConnectionListener listener) {
            mStore = new HealthDataStore(app, listener);
            mStore.connectService();
        }
    
        void setConnectionStatus(String status) {
            DSConnectionStatus = status;
        }
    }
    
    // create another class in the same package
    public class HealthDSConnectionListener implements HealthDataStore.ConnectionListener {
        private final HealthRepository repo;
    
        public HealthDSConnectionListener(HealthRepository repo) {
            this.repo = repo;
        }
    
        @Override public void onConnected() { repo.setConnectionStatus("Connected"); }
        @Override public void onDisconnected() { repo.setConnectionStatus("Disconnected"); }
    
        @Override public void onConnectionFailed(HealthConnectionErrorResult error) {
            repo.setConnectionStatus("Connection Failed"); 
        }
    };
    
    public class SplashViewModel extends AndroidViewModel {
        private final HealthRepository repo;
    
        public void connectRepoDataStore() {
            // repo is object of class HealthRepository
            repo.connectDataStore(mConnectionListener)
            // other things to do here 
        }
    
        private final HealthDSConnectionListener mConnectionListener = new HealthDSConnectionListener(repo) {
            @Override public void onConnected() {
                super.onConnected();
                // ...
            }
    
            @Override public void onConnectionFailed(HealthConnectionErrorResult error) {
                super.onConnectionFailed(error);
                // ...
            }
    
            @Override public void onDisconnected() {
                super.onDisconnected(); 
                // ...
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多