Skip to content Skip to sidebar Skip to footer

My Class In Not An Enclossing Class

so I have class constructor: public class HealthDataStore { // this class is 3rd party api - can't modify public HealthDataStore(Context context, HealthDataStore.ConnectionList

Solution 1:

Always try to avoid using inner classes if you know you'll have to extend them. Instead use a separate class, and swap the outer class with a field. If you need to modify a private field that you do not want to expose then create a package-private setter.

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(); 
            // ...
        }
    }
}

Post a Comment for "My Class In Not An Enclossing Class"