Java 如何修复';对于循环';覆盖以前的数组值

Java 如何修复';对于循环';覆盖以前的数组值,java,android,arrays,listview,Java,Android,Arrays,Listview,我正在使用查询从Firestore数据库检索信息。从调试中可以看出,当我将数据存储在ArrayList中时,每个值都会覆盖上一个值。因此,只有最终值显示在我的ListView中 我的for循环的各种变化。此时,尝试寻找解决方案大约5小时 public void addOrganisation(View view){ db.collection("organisations").whereEqualTo("user", mAuth.getCurrentUser().getUid()

我正在使用查询从Firestore数据库检索信息。从调试中可以看出,当我将数据存储在ArrayList中时,每个值都会覆盖上一个值。因此,只有最终值显示在我的ListView中

我的for循环的各种变化。此时,尝试寻找解决方案大约5小时

public void addOrganisation(View view){
        db.collection("organisations").whereEqualTo("user", mAuth.getCurrentUser().getUid()).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()){

                    for (QueryDocumentSnapshot document : task.getResult()){

                        Log.i(TAG, document.getId() + " => " + document.get("organisation"));

                        ArrayList<String> myOrgs = new ArrayList<String>(asList(document.get("organisation").toString()));

                        Log.i("ARRAY LIST", myOrgs.toString());

                        ListView myOrgsListView = findViewById(R.id.myOrgsListView);

                        ArrayAdapter<String> orgArrayAdapter = new ArrayAdapter<String>(AppSettings.this, android.R.layout.simple_list_item_1, myOrgs);
                        myOrgsListView.setAdapter(orgArrayAdapter);
                    }
                } else {
                    Log.i(TAG, "Error getting documents:", task.getException());
                }
            }
        });

    }
应为:ListView填充查询返回的4个值


实际值:ListView仅用查询返回的最终值填充。

您的代码应如下所示:

 public void addOrganisation(View view){
       ListView myOrgsListView = findViewById(R.id.myOrgsListView);
        db.collection("organisations").whereEqualTo("user", mAuth.getCurrentUser().getUid()).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()){
                    ArrayList<String> myOrgs = new ArrayList<>();
                    for (QueryDocumentSnapshot document : task.getResult()){

                        Log.i(TAG, document.getId() + " => " + document.get("organisation"));

                        myOrgs.add(document.get("organisation").toString())

                        Log.i("ARRAY LIST", myOrgs.toString());

                    }
                     ArrayAdapter<String> orgArrayAdapter = new ArrayAdapter<String>(AppSettings.this, android.R.layout.simple_list_item_1, myOrgs);
                        myOrgsListView.setAdapter(orgArrayAdapter);
                } else {
                    Log.i(TAG, "Error getting documents:", task.getException());
                }
            }
        });

    }
公共组织(视图){
ListView myOrgsListView=findViewById(R.id.myOrgsListView);
db.collection(“organizations”).whereEqualTo(“user”,mAuth.getCurrentUser().getUid()).get().addOnCompleteListener(新OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
ArrayList myOrgs=新的ArrayList();
对于(QueryDocumentSnapshot文档:task.getResult()){
Log.i(标记,document.getId()+“=>”+document.get(“组织”));
myOrgs.add(document.get(“组织”).toString())
Log.i(“数组列表”,myOrgs.toString());
}
ArrayAdapter orgArrayAdapter=新的ArrayAdapter(AppSettings.this,android.R.layout.simple\u list\u item\u 1,myOrgs);
设置适配器(orgArrayAdapter);
}否则{
Log.i(标记“获取文档时出错:”,task.getException());
}
}
});
}

ArrayList初始化必须在for循环之外。每次它在for循环中创建新的ArrayList时,您只能看到最后一次输出。请提供一些信息,说明为什么会这样,以及您所做的事情每次都在循环中初始化一个新的ArrayList。另外,您还在循环中创建了一个新适配器。因此,当循环完成执行时,ArrayList将只有最后一个元素。此外,将为该特定列表创建一个新的orgArrayAdapter,并且只显示listview中的最后一项。此外,每次在循环中创建新实例对您的性能也有不利影响谢谢Vishal和@p.mathew13。我盯着屏幕看太久了,该休息了!非常感谢。
 public void addOrganisation(View view){
       ListView myOrgsListView = findViewById(R.id.myOrgsListView);
        db.collection("organisations").whereEqualTo("user", mAuth.getCurrentUser().getUid()).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()){
                    ArrayList<String> myOrgs = new ArrayList<>();
                    for (QueryDocumentSnapshot document : task.getResult()){

                        Log.i(TAG, document.getId() + " => " + document.get("organisation"));

                        myOrgs.add(document.get("organisation").toString())

                        Log.i("ARRAY LIST", myOrgs.toString());

                    }
                     ArrayAdapter<String> orgArrayAdapter = new ArrayAdapter<String>(AppSettings.this, android.R.layout.simple_list_item_1, myOrgs);
                        myOrgsListView.setAdapter(orgArrayAdapter);
                } else {
                    Log.i(TAG, "Error getting documents:", task.getException());
                }
            }
        });

    }