Ошибка при отображении данных из Firebase в Listview - PullRequest
0 голосов
/ 23 июня 2019

В настоящее время я пытаюсь заставить задание работать, когда класс указан в списке, и по щелчку он возвращает имена и оценки пользователей в отдельном занятии со списком просмотра.Когда пользователь регистрируется в классе, его uid сохраняется в классе.Во-первых, я извлекаю uid'ы, перечисленные под именем класса, и это работает. После этого я использую uid, чтобы вернуться к информации о пользователе, получить имя и оценку и объединить ее в одну переменную, чтобы я мог показать еев ListView.К сожалению, когда я запускаю приложение, я получаю сообщение об ошибке:

Can't convert object of type java.lang.String to type com.samuelford48gmail.thsconnect.User

Когда я запускал приложение в режиме отладки, он говорил, что имя и оценка были нулевыми.Кроме того, когда я использовал system.out.println для отображения снимка данных, он возвращал только классы под пользовательским uid.Я думаю, что частью проблемы может быть моя структура в Firebase.

Вот моя структура Firebase:

{
  "Science" : {
    "-LhrSfhNaQX1ZiNToeYQ" : {
  "Students" : {
    "-LhzXqvBPJl-gvN7bZ6c" : "9TKqqNqge5cKpFgjHByAFpZ3iRD2"
  },
  "date_clasname" : "dd",
  "room_number" : "dd",
  "teacher" : "dd",
  "uid" : "-LhrSfhNaQX1ZiNToeYQ"
},
"-LhrSfwx3nKd3DhRNJRp" : {
  "date_clasname" : "dd",
  "room_number" : "dd",
  "teacher" : "dd",
  "uid" : "-LhrSfwx3nKd3DhRNJRp"
},
"-LhrSg-4YJ52a1Zj9LoK" : {
  "Students" : {
    "-LhrfCKXsrjDWC4dJU8H" : "9TKqqNqge5cKpFgjHByAFpZ3iRD2"
  },
  "date_clasname" : "dd",
  "room_number" : "dd",
  "teacher" : "dd",
  "uid" : "-LhrSg-4YJ52a1Zj9LoK"
   }
  },
   "Users" : {
"9TKqqNqge5cKpFgjHByAFpZ3iRD2" : {
  "Classes" : {
    "-LhrfCKVETBZrgOIrCLR" : {
      "date_clasname" : "dd",
      "room_number" : "dd",
      "teacher" : "dd"
    },
    "-LhzWYnqD-qi8v-MFWKF" : {
      "date_clasname" : "dd",
      "room_number" : "dd",
      "teacher" : "dd"
    },
    "-LhzXqv0RZMts7Df1Ehg" : {
      "date_clasname" : "dd",
      "room_number" : "dd",
      "teacher" : "dd"
    }
  },
  "email" : "svhsdev@vigoschools.org",
  "grade" : "11",
  "name" : "Samuel"
},
"NnJlSVeqGXhJ2Nab2bhjr0HIpku2" : {
  "Classes" : {
    "-LhNEZI73xZWbu8tb4ZL" : {
      "date_clasname" : "March 5",
      "room_number" : "101",
      "teacher" : "pence"
    },
    "-LhNFH_LB8PGKKOML-Ta" : {
      "date_clasname" : "d",
      "room_number" : "",
      "teacher" : "s"
    },
    "-LhNFHjC0sYKaXd_OcX2" : {
      "date_clasname" : "d",
      "room_number" : "",
      "teacher" : "s"
    },
    "-LhrbM1htXYd0CxZiKMZ" : {
      "date_clasname" : "dd",
      "room_number" : "dd",
      "teacher" : "dd"

  },
  "email" : "samuelford48@gmail.com",
  "grade" : "12",
  "name" : "Samuel Ford"
},
}
 }
  }

Вот код действия с Listview, которое пытается получитьИмя пользователя и класс:

public class admin_show_students_uid extends AppCompatActivity {

  private FirebaseDatabase database;
  private DatabaseReference myRef;
  String user_info = null;
  String name = null;
ListView lv;
ArrayList<String> list=new ArrayList<>();
@Override
protected void onCreate( Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.admin_show_students_uid);

    lv = (ListView) findViewById(R.id.lv_science_students);
    final ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
    lv.setAdapter(adapter);
    lv.setStackFromBottom(true);
    final String post_key = getIntent().getStringExtra("post_key");
    database = FirebaseDatabase.getInstance();
    myRef = database.getReference("Science").child(post_key).child("Students");
    myRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String s) {
    //name gets the uid saved
            name = dataSnapshot.getValue(String.class);

      myRef = database.getReference("Users").child(name);

     getusersinfo();        
  adapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

public void getusersinfo(){
    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot dataSnapshot2 : dataSnapshot.getChildren()) {
                User user = dataSnapshot2.getValue(User.class);
                String name = user.getName();
                String grade = user.getGrade();
             user_info = ("Name " + name + "Grade" + grade);
  list.add(user_info);

            }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

           }
       });

    }
  }

Заранее благодарим вас и сообщите, если у вас есть какие-либо вопросы по поводу моего кода!

1 Ответ

0 голосов
/ 23 июня 2019

Проблема в том, что вы получили ссылку на конкретного пользователя, но в пределах getuserinfo() вы перебираете его атрибуты. Вместо этого просто получите User из dataSnapshot. См:

public void getusersinfo(){
    studentRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);
            String email = user.getName();
            String grade = user.getGrade();
            user_info = ("Name " + email + "Grade" + grade);
            list.add(user_info);               
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...