#java #firebase-realtime-database
#java #firebase-realtime-database
Вопрос:
Я пытаюсь понять, как использовать коллекции.сортировка и Collections.reverse и подумал, что у меня почти получилось, но иногда мой рейтинг не размещается в порядке от самого высокого до самого низкого… Я выполнил серию операторов if и теперь уверен, что это лучший способ, но у меня возникла какая-то странная проблема с порядком сортировки. Я попытался отредактировать свою базу данных, но она не сортирует ее должным образом….
DatabaseReference reference = FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/")
.getReference()
.child("Medical Clinics")
.child("Clinics"); // getReference() is the root // can keep adding parents
reference.addValueEventListener(new ValueEventListener() {
@SuppressLint("SetTextI18n")
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
list.clear();
popular_clinic_ranking = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
popular_clinics = String.valueOf(snapshot.child("ranking").child("ranking").getValue());
if (popular_clinics.equals("[Super Sleuth]")) {
popular_clinics_name = String.valueOf(snapshot.child("Postal Information").child("name").getValue());
popular_clinics_score = snapshot.child("Postal Information").child("total_Score").getValue(Integer.class);
} if (popular_clinics.equals("[Master Detective]")) {
popular_clinics_name = String.valueOf(snapshot.child("Postal Information").child("name").getValue());
popular_clinics_score = snapshot.child("Postal Information").child("total_Score").getValue(Integer.class);
} if (popular_clinics.equals("[Senior Detective]")) {
popular_clinics_name = String.valueOf(snapshot.child("Postal Information").child("name").getValue());
popular_clinics_score = snapshot.child("Postal Information").child("total_Score").getValue(Integer.class);
String txt;
txt = "Medical Clinic: " popular_clinics_name "nnTotal Score: " popular_clinics_score "nnRanking: " popular_clinics;
list.add(txt);
Collections.sort(list);
Collections.reverse(list);
adapter.notifyDataSetChanged(); // need to use both Collections.sort and Collections.reveerse...
Теперь я пытаюсь сохранить информацию в порядке ранжирования, и, похоже, это работает таким образом, но не все ранжирование вставляется в базу данных… Кроме того, почему count возвращает 4, когда у меня 3 медицинские клиники под двумя родителями? Считает ли он одного из моих родителей дочерним? Имеет ли значение, есть ли у меня заглавные буквы или строчные буквы при создании дочернего элемента? Я понял, что дочерний элемент должен быть в нижнем регистре, чтобы он работал как дочерний элемент?
DatabaseReference reference = FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/").getReference().child("Medical Clinics").child("Clinics"); // getReference() is the root // can keep adding parents
reference.addValueEventListener(new ValueEventListener() {
@SuppressLint("SetTextI18n")
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
list.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
popular_clinics = String.valueOf(snapshot.child("ranking").child("ranking").getValue());
count = (int) snapshot.getChildrenCount() - 1;
for(int i = 0; i<= count; i ) {
if (popular_clinics.equals("[Super Sleuth]")) {
popular_clinics_name = String.valueOf(snapshot.child("Postal Information").child("name").getValue());
popular_clinics_score = snapshot.child("Postal Information").child("total_Score").getValue(Integer.class);
HashMap<String, Object> map = new HashMap<>();
map.put("name", popular_clinics_name);
map.put("score", popular_clinics_score);
map.put("ranking", popular_clinics);
FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/").getReference().child("Medical Clinics").child("Popular Clinics").child("Super Sleuth").child("super sleuth").setValue(map);
}
Комментарии:
1. Какой язык вы используете
2. Привет! Я использую Java..
3. Я использую listview и читаю, что я должен использовать recycledview, правильно ли это?
Ответ №1:
проблема в том, что вы пытаетесь отсортировать числовые строковые значения. и у java есть глупая проблема с этим, например, если у вас есть эти значения в вашем списке:
«пункт 01» «пункт 02» «пункт 03» «пункт 10»
после сортировки порядок будет примерно таким:
«пункт 01» «пункт 10» «пункт 02» «пункт 03»
Таким образом, одним из чистых способов было бы сохранить ваши данные в классе, подобном so, возможно:
public static class People {
String name;
int score;
String ranking;
public People(String name, int score, String ranking) {
this.name = name;
this.score = score;
this.ranking = ranking;
}
}
А затем создайте ArrayList таких людей:
ArrayList<People> peopleInfo = new ArrayList<People>();
Затем добавьте свои данные в этот ArrayList, а затем отсортируйте их следующим образом:
peopleInfo.sort(Comparator.comparing(info -> info.name));
Также обратите внимание, что этот тип сортировки чувствителен к регистру.
Комментарии:
1. но мои целые числа не являются строковыми, хотя я сортирую в соответствии с моим arraylist, который является строкой… оценки не должны иметь значения, но мой инспектор должен быть выше, чем Gumshoe
2. tring txt; txt = «Медицинская клиника: » popular_clinics_name «n Ntтотал Оценка: » popular_clinics_score «n nRanking: » popular_clinics; вот как вы добавляете свои значения, и я вижу popular_clinics_score в середине, что означает, что там есть число, преобразованное в строку
3. Итак, я предполагаю, что это невозможно сделать? и я не буду продолжать с этим
4. это можно сделать, и я дал вам ссылку на ответ в моем ответе. вы это проверили?
5. Я просто отредактировал свой ответ и предложил простое решение. проверьте это.