Android Java Firestore db OnComplete方法无法将数组列表传递到活动类[重复]

mqxuamgl  于 2022-12-09  发布在  Android
关注(0)|答案(1)|浏览(86)

此问题在此处已有答案

How to return a DocumentSnapShot as a result of a method?(2个答案)
2小时前关门。
我有一个firestore数据库,我试图从那里获取数据。我的目的是在我的getDiaryInformation类中从那里获取数据,并将所有数据放入一个数组列表。在放入所有数据后,我想将其发送到我的Activity类。但当我尝试将数组列表从我的getDiaryInformation返回到我的Activity类时,它返回空,即使其中有数据。简单地说,我把我的值添加到数组列表中,但是当我试图返回它的时候,却不能发送到我的Activity类中。我该怎么做才能把我的值返回到Activity类中呢?
这是我的getDiaryInformation类。我把我的标题值放到我的数组列表中。我正试图把这个数组列表发送到我的Activity类。
`

public class GetDiaryInformation {
    ArrayList<String> titleInformation=new ArrayList<>();
   

    public ArrayList<String> getTitle(){
        FirebaseFirestore db=FirebaseFirestore.getInstance();
        db.collection("diary").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if(task.isSuccessful()){
                    for (QueryDocumentSnapshot document:task.getResult()) {
                        titleInformation.add(document.get("title").toString());
                    }

                }
                else{
                    Log.d("EXCEPTION",task.getException().getMessage());

                }

            }

        });

        return titleInformation;
    }

}`

下面是我试图从getDiaryInformation类中获取值。在获取值后,我想打印它们,但我的数组列表返回空。

`public class ReadDiary extends AppCompatActivity {
    GetDiaryInformation Data;
    ArrayList<String> titleInformation=new ArrayList<>();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_diary);
        getSupportActionBar().setTitle("Read Your Diaries");

        Data=new GetDiaryInformation();
        titleInformation=Data.getTitle();
        Log.d("NEPTUN", String.valueOf(titleInformation.size()));
        for (int i = 0; i < Data.titleInformation.size(); i++) {
            Log.d("MARS",titleInformation.get(i));
        }
        

    }



}`

我看了https://stackoverflow.com/questions/55319499/synchronized-java-oncomplete-method,但不知道该怎么做。我也试着在那个链接中添加接口,但我在Activity类中调用了我的方法,所以这对我来说是另一个问题。我该怎么做才能防止这种情况,并将所有值放入数组列表?

rjee0c15

rjee0c151#

尝试使用@Autowire注解进行依赖注入。
代替:

GetDiaryInformation Data;

试试看:

@Autowired
private GetDiaryInformation Data;

或者您可以尝试:

private GetDiaryInformation getDiaryInformation;

    public ReadDiary (GetDiaryInformation getDiaryInformation) {
     this.getDiaryInformation = getDiaryInformation; 
}

https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring

  • 依赖注入是我们可以用来实现IoC的一种模式,在这种模式中,控制被反转,设置对象的依赖关系。将对象与其他对象连接起来,或者将对象“注入”到其他对象中,是由汇编程序完成的,而不是由对象本身完成的。*

相关问题