java - 使用 FirebaseUI 在 Android TextView 中绑定(bind)嵌套的 JSON

标签 java android json firebase

因此,我正在创建一个 Android Java 类,该类将按照 FirebaseUI 教程中的说明表示来自 Firebase 的数据 here .我必须将 JSON 字段声明为类中的变量。我只是不知道如何声明嵌套字段或我应该使用什么数据类型。

这是我的 Firebase 数据:

 {
  "Juan Dela Cruz" : {
    "ID" : 1,
    "Name" : "Juan Dela Cruz",
    "Schedule" : [ null, {
      "Classroom" : "Lab 1",
      "Subject" : "Software Engineering",
      "Time_End" : "9:00",
      "Time_Start" : "8:00"
    }, {
      "Classroom" : "Lab 2",
      "Subject" : "Cisco",
      "Time_End" : "12:00",
      "Time_Start" : "10:00"
    } ],
    "Status" : "In"
  }
}

更新 我在这里为 Schedule 添加了一个单独的类:

public class FacultyList {

    private String Name;
    private String ID;
    private String Status;
    private Sched Schedule;

    public FacultyList(){

    }


    public FacultyList(String Name, String ID, String Status, Sched Schedule ){
        this.Name = Name;
        this.ID = ID;
        this.Status = Status;
        this.Schedule = Schedule;
    }


    public String getName(){
        return Name;
    }

    public String getID(){
        return ID;
    }

public Sched getSchedule(){
return Schedule;
}

    public String getStatus(){
        return Status;
    }

    public class Sched Schedule {
private String Classroom;
private String Subject;
private String Time_End;
private String Time_Start;

public Sched(){

}

public Sched(String Classroom, String Subject, String Time_End, String Time_Start){
this.Classroom = Classroom;
this.Subject= Subject;
this.Time_End = Time_End;
this.Time_Start = Time_Start;
}

public String getClassroom(){
return Classroom;
}

public String getSubject(){
return Subject;
}

public String getTime_Start(){
return Time_Start;
}

public String getTime_End(){
return Time_End;
}



}

我的主要 Activity 类中的代码 fragment :

public void fetchFaculty(){

Firebase ref = new Firebase("https://infotrack.firebaseio.com/infotrack/faculty");

GridView gridView = (GridView) findViewById(R.id.grid);
FirebaseListAdapter<FacultyList> listFaculty = new FirebaseListAdapter<FacultyList>(this,FacultyList.class, R.layout.layout_faculty, ref) {


    @Override
    protected void populateView(View view,FacultyList faculty) {
        String ID = faculty.getID();
        String Status = faculty.getStatus();

        ImageView image = (ImageView) view.findViewById(R.id.imageFaculty);

        if(Status.equalsIgnoreCase("In")) {
            Picasso.with(getApplicationContext()).load("http://infotrack.kimfeliciano.xyz/images/" + id + ".png").fit().centerCrop().into(image);
        } else {
            Picasso.with(getApplicationContext()).load("http://infotrack.kimfeliciano.xyz/images/" + id + "x.png").fit().centerCrop().into(image);
        }



        ((TextView) view.findViewById(R.id.txtName)).setText(faculty.getName());
        ((TextView) view.findViewById(R.id.txtClassroom)).setText(faculty.getSchedule().getClassroom());




    }


};

   gridView.setAdapter(listFaculty);


}

当我不从 Schedule 类查询数据时,我的代码工作正常。由于我试图从“Schedule”类中查询“classroom”,因此出现以下错误:

FATAL EXCEPTION: main Process: xyz.kimfeliciano.infotrack.infotrack, PID: 25782 java.lang.NullPointerException at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.find(BeanPropertyMap.java:216) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:292) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) at com.firebase.ui.FirebaseListAdapter.getView(FirebaseListAdapter.java:130) at android.widget.AbsListView.obtainView(AbsListView.java:2263) at android.widget.GridView.onMeasure(GridView.java:1044) at android.view.View.measure(View.java:16558) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:16558) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:16558) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:16558) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) at android.view.View.measure(View.java:16558) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1923) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1120) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1302) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1007) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5677) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5021) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) at dalvik.system.NativeStart.main(Native Method)

最佳答案

这是你的根对象

public class MyJsonPojo {

    private JuanDelaCruz JuanDelaCruz;

    /**
     * 
     * @return
     *     The JuanDelaCruz
     */
    public JuanDelaCruz getJuanDelaCruz() {
        return JuanDelaCruz;
    }

    /**
     * 
     * @param JuanDelaCruz
     *     The Juan Dela Cruz
     */
    public void setJuanDelaCruz(JuanDelaCruz JuanDelaCruz) {
        this.JuanDelaCruz = JuanDelaCruz;
    }

}

这是您的 juan dela cruz 对象:

import java.util.ArrayList;
import java.util.List;

public class JuanDelaCruz {

    private int ID;
    private String Name;
    private List<Schedule> Schedule = new ArrayList<Schedule>();
    private String Status;

    /**
     * 
     * @return
     *     The ID
     */
    public int getID() {
        return ID;
    }

    /**
     * 
     * @param ID
     *     The ID
     */
    public void setID(int ID) {
        this.ID = ID;
    }

    /**
     * 
     * @return
     *     The Name
     */
    public String getName() {
        return Name;
    }

    /**
     * 
     * @param Name
     *     The Name
     */
    public void setName(String Name) {
        this.Name = Name;
    }

    /**
     * 
     * @return
     *     The Schedule
     */
    public List<Schedule> getSchedule() {
        return Schedule;
    }

    /**
     * 
     * @param Schedule
     *     The Schedule
     */
    public void setSchedule(List<Schedule> Schedule) {
        this.Schedule = Schedule;
    }

    /**
     * 
     * @return
     *     The Status
     */
    public String getStatus() {
        return Status;
    }

    /**
     * 
     * @param Status
     *     The Status
     */
    public void setStatus(String Status) {
        this.Status = Status;
    }

}

这是您的 Schedule 对象类

public class Schedule {

    private String Classroom;
    private String Subject;
    private String TimeEnd;
    private String TimeStart;

    /**
     * 
     * @return
     *     The Classroom
     */
    public String getClassroom() {
        return Classroom;
    }

    /**
     * 
     * @param Classroom
     *     The Classroom
     */
    public void setClassroom(String Classroom) {
        this.Classroom = Classroom;
    }

    /**
     * 
     * @return
     *     The Subject
     */
    public String getSubject() {
        return Subject;
    }

    /**
     * 
     * @param Subject
     *     The Subject
     */
    public void setSubject(String Subject) {
        this.Subject = Subject;
    }

    /**
     * 
     * @return
     *     The TimeEnd
     */
    public String getTimeEnd() {
        return TimeEnd;
    }

    /**
     * 
     * @param TimeEnd
     *     The Time_End
     */
    public void setTimeEnd(String TimeEnd) {
        this.TimeEnd = TimeEnd;
    }

    /**
     * 
     * @return
     *     The TimeStart
     */
    public String getTimeStart() {
        return TimeStart;
    }

    /**
     * 
     * @param TimeStart
     *     The Time_Start
     */
    public void setTimeStart(String TimeStart) {
        this.TimeStart = TimeStart;
    }

}

我使用 pojo 生成器网站生成了所有这些 pojo,例如 this one

关于java - 使用 FirebaseUI 在 Android TextView 中绑定(bind)嵌套的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248906/

相关文章:

java - 将图像添加到 jar 中,使用 ANT 到特定位置

java - 当默认区域设置为 "en"时,ReloadableResourceBundleMessageSource 无法找到消息

java - 如何为依赖于同一个 jar 的两个独立项目设置 Maven

java - 无法写入android模拟器中的文件

android datepickerDialog 不应该接受 future 的日期

javascript - 仅使用 requirejs 通过管道传送 json 主体

java - 如何使用 google-oauth-java-client?

java - 为什么我在使用Eclipse(Android)时仍然无法使用fragment?

java - 使用java解析json

json - 无效的 JSON 架构错误