Java Android:如何使用dagger将抽象类转换为单例

时间:2017-10-14 14:08:25

标签: java android firebase-realtime-database abstract-class dagger-2

我有这个帮助类构造一个pojo。我正在使用firebase来获取对象并创建一个对象。

问题:这个类被大量调用,我认为不继续创建它的实例会更经济。

我自己尝试过,但是尴尬地失败了,还在学习。

THE CLASS

public abstract class FetchPost implements ValueEventListener {
    public abstract void event(Post post);

    private Post   post;
    private String postId;

    public FetchPost(String postId) {
        AsyncTask.execute(() -> {
            this.postId = postId;
            Nodes.appRef("/posts/" + postId).addListenerForSingleValueEvent(this);
        });
    }

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        post = dataSnapshot.getValue(Post.class);
        getUser();
    }

    @Override
    public void onCancelled(DatabaseError e) {

    }

    private void getUser() {
        Nodes.Users.profile(post.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot d) {
                User user = d.getValue(User.class);
                post.setUser(user);
                getSound();
            }

            @Override
            public void onCancelled(DatabaseError e) {
            }
        });
    }

    public void getSound() {
        Nodes.appRef("sounds/" + post.getObjectId()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Sound sound = dataSnapshot.getValue(Sound.class);
                sound.setSoundId(dataSnapshot.getKey());
                post.setSound(sound);
                event(post);
            }

            @Override
            public void onCancelled(DatabaseError e) {
            }
        });
    }
}

我如何构建这个类,以便我可以将Dagger用作单身?

我尝试使用带有接口的普通类来代替抽象方法,但每当我使用接口作为事件监听器调用FetchPost()时,所有先前的调用都将被替换。

0 个答案:

没有答案