2016-08-07 4 views
2

У меня есть данные выглядит следующим образом:Firebase - получить данные в Android

{ 
"courses" : { 
    "Business" : { 
     "-KOBuojCGl_KVNgCx6l3" : { 
     "courseCode" : "BUS2202", 
     "courseName" : "Business Mathematics" 
     }, 
     "-KOCH9RvYkwIamb0oxi8" : { 
     "courseCode" : "BUS2302", 
     "courseName" : "Business Fundamentals" 
     } 
    }, 
    "Computing & IT" : { 
     "-KOBukFDN8eDjzF77haS" : { 
     "courseCode" : "SDT2201", 
     "courseName" : "System Designs" 
     }, 
     "-KOBuriS_C5njfhAkV_P" : { 
     "courseCode" : "SDT3201", 
     "courseName" : "Computer Project" 
     }, 
     "-KOD-E81rtXhzEmSeRPx" : { 
     "courseCode" : "SDT2202", 
     "courseName" : "System Designs Year 2" 
     }, 
    } 
    } 
} 

И интерфейс выглядит следующим образом:

enter image description here

Когда пользователь выбирает бизнес Основы, textview1 должен отображать BUS2302 и textview2 должны отображать основы бизнеса.

коды Я пытаюсь в настоящее время:

public class MainActivity extends AppCompatActivity{ 

    private TextView tv1, tv2; 
    private DatabaseReference mRef; 
    private String code, name; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mRef = FirebaseDatabase.getInstance().getReference().child("courses").child("Business"); 
     tv1 = (EditText) findViewById(R.id.textview1); 
     tv2 = (EditText) findViewById(R.id.textview2); 

     mRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       CourseDetails courseDetails = dataSnapshot.getValue(CourseDetails.class); 
       code = courseDetails.getCourseCode(); 
       name = courseDetails.getCourseName(); 
       tv1.setText(code); 
       tv2.setText(name); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 
} 

CourseDetails класс:

public class CourseDetails { 
    private String courseCode; 
    private String courseName; 

    public CourseDetails() { 
    } 

    public CourseDetails(String courseCode, String courseName) { 
     this.courseCode = courseCode; 
     this.courseName = courseName; 
    } 

    public String getCourseCode() { 
     return courseCode; 
    } 

    public void setCourseCode(String courseCode) { 
     this.courseCode = courseCode; 
    } 

    public String getCourseName() { 
     return courseName; 
    } 

    public void setCourseName(String courseName) { 
     this.courseName = courseName; 
    } 
} 

Когда я запускаю коды, оба TextViews просто пустой, и сообщение об ошибке. Когда я изменил mRef ValueEventListener на это:

mRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       tv1.setText(dataSnapshot.getValue().toString()); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

Данные целые JSON распечатаны в textview1, так что я знаю, мои данные есть. Но когда я использую getCourseCode() и getCourseName(), текстовые поля пусты. Какие-либо предложения?

У меня есть другой вопрос, какие коды будут использованы для получения push key курса, а затем отобразите только код курса и имя. Вопрос можно найти here

+0

Попробуйте перейти на публичный модификатор вместо private для курса курса и имени курса в вашем классе CourseDetails. – 0p3n5ourcE

+0

по-прежнему пустой после перехода на общедоступный –

+0

где кнопка, где пользователь выбирает название курса? – Wilik

ответ

1

В вашем MainActivity для Mref Эталонного до узла Бизнеса базы данных, которая имеет еще два ребенка с ключами, которые я думаю, генерируюсь с использованием толчка. Итак, я думаю, вам нужно перебирать детей. Вы можете попробовать что-то, как показано ниже:

mRef.addValueEventListener(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    // for each children 
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 

     CourseDetails courseDetails = snapshot.getValue(CourseDetails.class); 
     code = courseDetails.getCourseCode(); 
     name = courseDetails.getCourseName(); 
     tv1.setText(code); 
     tv2.setText(name); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

}

Если это дает некоторый результат, кроме нулевой, то, возможно, придется работать в картографирования TextViews с соответствующими для ключа.

+0

Спасибо. Теперь есть данные, показывающие наконец. Не возражаете, чтобы проверить мой другой вопрос [здесь] (http://stackoverflow.com/questions/38808970/android-get-push-key-based-on-a-child-firebase/38809229#38809229)? –

+0

Я рад, что смогу помочь в этом. Я смущен, и ваша другая проблема уже решена? – 0p3n5ourcE

+0

Да. Только что понял, решил уже. Большое спасибо –

Смежные вопросы