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