Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Android如何将列表从一个类返回到多个类?_Java_Android - Fatal编程技术网

Java-Android如何将列表从一个类返回到多个类?

Java-Android如何将列表从一个类返回到多个类?,java,android,Java,Android,我试图在Android上创建一个可重用类,该类从Firebase数据库获取用户数据,创建用户模型列表,并将该列表返回给可能需要该列表的任何其他类。但我做不到。我不会用所有的代码来打扰你,但我得到的基本上是: Class Reusable { //declare FireBase Auth, DatabaseReference, etc. private Context mContext; private List<Users> mUserList; public Reusable

我试图在Android上创建一个可重用类,该类从Firebase数据库获取用户数据,创建用户模型列表,并将该列表返回给可能需要该列表的任何其他类。但我做不到。我不会用所有的代码来打扰你,但我得到的基本上是:

Class Reusable {
//declare FireBase Auth, DatabaseReference, etc.
private Context mContext;
private List<Users> mUserList;

 public Reusable (Context context){
       mContext = context;
        mUserList= new ArrayList<>();
  }
}

public void getUsersIdFromDb(){
   List<Strings> idList = = new ArrayList<>();    

 //gets  Users Id from Database and save it to idList:

    idList.addAll(ids); //ids are ids fetched from Database
   Log.d("StepOne",Integer.toString(idList.size(); //returns correct number of ids
    createListOfModels(idList);
}


private void createListOfModels(final List<Strings> list){  

 //compares fetched ids with ids inside logged user node 
 //if it passes:

    for(String id: list){
        String name = datasnapshot.child(id).child("name).getValue();
        String pic= datasnapshot.child(id).child("pic).getValue();
        UserModel user = new UserModel(name, pic);
        mUserList.add(user); 
       }

        processListOfUsers(mUserList);

    }

private void processListOfUsers(List<Users> list){
 for (User u: list){
  mUserList.add(u);
        Set<Users> hs = new LinkedHashSet<>();
        hs.addAll(mUserList);
        mUserList.clear();
        mUserList.addAll(hs);
 Log.d("StepThree",Integer.toString(mUserList.size(); //returns correct number of Users
 }
}

public List<Users> getList(){

    return mUserList;
}
从日志中列表的大小可以看出,它返回的是一个空列表。我应该如何设置Reusables,以便它在其他类调用时返回列表

我仍在通过Java和Android寻找出路,因此我非常感谢您的帮助


[编辑]可能与Firebase调用是异步的这一事实有关?因为,你看,只要我把结果传递给参数,日志就会返回一个完整的列表。但是在这个链之外调用一个方法,可能会在Firebase线程之外触发它的执行,在Firebase线程中,列表仍然是空的。

我不太明白您试图解决的问题是什么。如果它返回零,那是因为你从来没有用这个代码中的任何东西来填充列表。列表存在,只是空的

构造函数创建一个空列表(大小为0)

然后得到该列表的大小为零

int i=reusables.getList().size()


这里没有错误,您只需要在构造函数或其他地方填充列表。

列表在可重用内部填充,通过getUsersIdFromDb()方法,该方法从自身内部调用其他方法。但它不会更新mList。我已经编辑了我的问题,以包含对getUsersIdFromDb()的调用,但我忘记了。结果是一样的:没有列表。嗨,吉诺。是的,我查过了。所有内容都从可重用类内部正确记录。问题在于实例化它时。
processListoUsers
的目的是什么?是否用于删除重复用户。。。?看起来问题就在那里。首先,当您在
列表中循环时,您正在从
列表中删除/清除项目(=
mUserList
)。第二,您在不需要传递的时候传递了
mUserList
,因为它已经是类成员(您可以直接在
processListOfUsers
中访问它)。不,Gino。日志(第三步)还返回列表的大小。我无法从processListOfUsers访问,因为它需要一个列表参数。它接收具有重复项的用户列表并将其删除。如果我从另一个类传递一个空列表,它也会返回空。与当前的问题无关,但是如果您希望相同的列表在不同的活动中可用,则需要创建一个单例或一些静态变量。您是对的,Tyler。谢谢大家。
public SomeClass  extends AppCompatActivity {

   //onCreate, etc...

   Reusable reusable = new Reusable(SomeClass.this);
reusable.getUsersIdFromDb();
int i = reusable.getList().size();
Log.d("FromSomeClass", Integer.toString(i);
//returns 0 when it should return the size of the List from Reusable;
//How do I get the List From Reusable Class??
}
public Reusable (Context context){
   mContext = context;
    mUserList= new ArrayList<>(); 
}
Reusable reusable = new Reusable(SomeClass.this);