Я пытался выяснить, почему это не работает, и я посмотрел на другие сообщения stackoverflow, но я не могу понять, как это правильно.
Вот мой код, это фрагмент, который должен отображать пользователей из моей базы данных Firebase в реальном времени.
public class PeopleFragment extends Fragment {
ListView listView;
private List<User> mUsers;
private TextInputEditText search_bar;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_people, container, false);
//construct the data source
ArrayList<User> arrayOfUsers = new ArrayList<User>();
//create the adapter to convert the array into view
UserAdapter adapter = new UserAdapter(getContext(), arrayOfUsers);
listView = view.findViewById(R.id.list_view2);
listView.setAdapter(adapter);
search_bar = view.findViewById(R.id.search_bar);
mUsers = new ArrayList<>();
readUsers();
return view;
}
//Used to read the users from the database
public void readUsers() {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersdRef = rootRef.child("Users");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ds.child("Name").getValue(String.class);
list.add(name);
Log.d("TAG", name);
}
//Out of the loop
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(), R.layout.user_item, list);
listView.setAdapter(arrayAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
}
}
Я гуглил и следовал некоторым примерам на некоторых людях, а также создал этот пользовательский адаптер для соединения с моим списком.
public class UserAdapter extends ArrayAdapter<User> {
public UserAdapter(Context context, ArrayList<User> users) {
super(context, 0, users);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//get the data item for this position
User user = getItem(position);
//check if an existing view is being reused, otherwise inflate
if(convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.user_item, parent,false);
}
TextView name = convertView.findViewById(R.id.username);
TextView hometown = convertView.findViewById(R.id.hometown);
name.setText(user.getUsername());
hometown.setText(user.getCountry());
return convertView;
}
}
Вот мой XML файл:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
tools:context=".Fragments.PeopleFragment">
<ListView
android:id="@+id/list_view2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Я не получаю никакой ошибки, я могу загрузить активность, но ничего не появляется, ни один пользователь не появляется, ничего не происходит. ..
Вот моя структура базы данных в виде JSON
{
"Users" : {
"DScz6jMT32VyhwUuaOb5B8tqLVs1" : {
"Age" : "22",
"Country" : "Bahrain",
"Name" : "tomas"
},
"hrDq5RR4PXNKXGSv5KJJabZRbqA2" : {
"Age" : "17",
"Country" : "Portugal",
"Name" : "Tomás Mota",
"Posts" : {
"-Lw_6ZSyVScYbiktPQh8" : {
"Post" : "GOOD"
},
"-Lw_MlgUn01UPCqAgzdc" : {
"Post" : "Very well actually"
}
}
}
}
}
Любая помощь приветствуется.