Firebase datasnapshot.getValue (class) возвращает ноль, даже если getChildren возвращает значения - PullRequest
1 голос
/ 05 марта 2020

enter image description here

Я использовал базу данных firebase и сохраненные данные, как показано ниже.

Но в методе OnDataChange метод snapshot.getValue () возвращает нулевые значения моему классу объект, как показано в снимке отладки, указанном ниже:

enter image description here

Код указан ниже:

Pani. java

public class Pani {
    private String pid, pname, ptype, pfunc;
    private Pani()
    {

    }

    public Pani(String pid, String pname, String ptype, String pfunc) {
        this.pid = pid;
        this.pname = pname;
        this.ptype = ptype;
        this.pfunc = pfunc;
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public String getPtype() {
        return ptype;
    }

    public void setPtype(String ptype) {
        this.ptype = ptype;
    }

    public String getPfunc() {
        return pfunc;
    }

    public void setPfunc(String pfunc) {
        this.pfunc = pfunc;
    }
}

MyAdapter. java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private List<Pani> listData;

    public MyAdapter(List<Pani> listData){
        this.listData = listData;

    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater= LayoutInflater.from(parent.getContext());
        View view=inflater.inflate(R.layout.search_list_layout,parent,false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.pani_name.setText(listData.get(position).getPname());
        holder.pani_function.setText(listData.get(position).getPfunc());
    }

    @Override
    public int getItemCount() {
        return listData.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

     TextView pani_name,pani_function;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            pani_name = itemView.findViewById(R.id.pani_name);
            pani_function=itemView.findViewById(R.id.pani_function);

        }
    }
}

домашняя деятельность. java

public class homeActivity extends AppCompatActivity {
    private List<Pani> listData;
    private RecyclerView rv;
    private MyAdapter adapter;

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

        rv = (RecyclerView) findViewById(R.id.pani_search_list);
        rv.setHasFixedSize(true);
        rv.setLayoutManager(new LinearLayoutManager(this));
        listData = new ArrayList<>();

        final DatabaseReference nm = FirebaseDatabase.getInstance().getReference().child("Pani");
        nm.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (DataSnapshot npsnapshot : dataSnapshot.getChildren()) {
                        Pani l = npsnapshot.getValue(Pani.class);
                        listData.add(l);
                    }
                    adapter = new MyAdapter(listData);
                    rv.setAdapter(adapter);

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }
}

1 Ответ

0 голосов
/ 06 марта 2020

Я нашел решение, когда @Alex Mamo попросил меня опубликовать файл json для базы данных. В файле JSON я обнаружил несколько нежелательных "\", которые могут вызвать эту проблему. Но я не знаю почему? На самом деле, я создал эту базу данных, вручную вводя значения в каждый ключ.

Ниже приводится существующее содержимое JSON:

{  "Pani" : {
"\"Budget\"" : {
  "\"pfunc\"" : "hardware",
  "\"pid\"" : "1",
  "\"pname\"" : "Budget",
  "\"ptype\"" : "shop"
},
"Basheer" : {
  "\"pfunc\"" : "Plumbing",
  "\"pid\"" : "0",
  "\"pname\"" : "Basheer",
  "\"ptype\"" : "Person"
}

}}

Я исправил следующее формат, и это сработало !!!

  {  "Pani" : {
"Budget" : {
  "pfunc" : "hardware",
  "pid" : "1",
  "pname" : "Budget",
  "ptype" : "shop"
},
"Basheer" : {
  "pfunc" : "Plumbing",
  "pid" : "0",
  "pname" : "Basheer",
  "ptype" : "Person"
}

}}

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