Сеттер / поле не найдено - PullRequest
       1

Сеттер / поле не найдено

1 голос
/ 16 февраля 2020

Привет всем, я пытаюсь получить данные из набора данных Firebase, и я продолжаю получать эту ошибку, даже если я пробовал каждое отдельное решение из StackOverflow и то, что я смог найти в Google, но без какой-либо выгоды.

Ниже я свяжу Activity и Class с наборами данных.

Я новичок в Android и не могу понять, почему не работает, так как некоторые люди решили проблему, и я сделал то же самое, но ничего не получалось.

Заранее спасибо.

КОД ДЕЯТЕЛЬНОСТИ

package com.example.ipill;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import com.firebase.ui.database.FirebaseRecyclerAdapter;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.GenericTypeIndicator;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;

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


public class FirebaseSearch extends AppCompatActivity {

    private EditText mSearchField;
    private ImageButton mSearchBtn;

    private RecyclerView mResultList;



    private DatabaseReference mUserDatabase;

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

        mUserDatabase = FirebaseDatabase.getInstance().getReference("Users");

        mSearchField = (EditText) findViewById(R.id.search_field);

        mSearchBtn = findViewById(R.id.search_btn);
        mResultList = (RecyclerView)findViewById(R.id.result_list);

        mResultList.setHasFixedSize(true);
        mResultList.setLayoutManager(new LinearLayoutManager(this));

        mSearchBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String searchText = mSearchField.getText().toString();

                firebaseUserSearch(searchText);

            }
        });


    }

    private void firebaseUserSearch(String searchText) {

        Toast.makeText(FirebaseSearch.this, "Started Search", Toast.LENGTH_LONG).show();

        Query firebaseSearchQuery = mUserDatabase.orderByChild("Name").startAt(searchText).endAt(searchText + "\uf8ff");

        FirebaseRecyclerAdapter<Users, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(

                Users.class,
                R.layout.list_layout,
                UsersViewHolder.class,
                firebaseSearchQuery

        ) {
            @Override
            protected void populateViewHolder(UsersViewHolder viewHolder, Users model, int position) {
                viewHolder.setDetails(model.getName(), model.getSurname());

            }
        };

        mResultList.setAdapter(firebaseRecyclerAdapter);

    }


    // View Holder Class

    public static class UsersViewHolder extends RecyclerView.ViewHolder {

        View mView;

        public UsersViewHolder(View itemView) {
            super(itemView);
            mView = itemView;

        }

        public void setDetails(String name, String surname) {

            TextView user_name = (TextView) mView.findViewById(R.id.name_text);
            TextView user_surname = (TextView) mView.findViewById(R.id.status_text);

            user_name.setText(name);
            user_surname.setText(surname);


        }

    }
}

введите код здесь

БАЗА ДАННЫХ:

{
  "Users" : {
    "01" : {
      "Name" : "Alex",
      "Surname" : "Kyto"
    }
  }
}

Проблема, с которой я столкнулся:

Нет сеттер / поле для фамилии найдено в классе com.example.ipill.Users (поля / сеттеры чувствительны к регистру!) Нет сеттера / поля для имени найдено в классе com.example.ipill.Users (поля / сеттеры чувствительны к регистру!)

Модель CLASS

package com.example.ipill;

public class Users {

    public String name, surname;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public String getSurname() {
        return surname;
    }


    public void setSurname(String surname) {
        this.surname = surname;
    }


    public Users(String name, String surname, String status) {
        this.name = name;
        this.surname = surname;

    }

    public Users(){

    }

} 

введите код

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Измените свойство Users, как показано ниже, чтобы соответствовать Firebase . Ваша база данных и POJO должны быть выровнены для работы.

public String Name, Surname; //Capitalize each property
1 голос
/ 16 февраля 2020

Чтобы иметь возможность сопоставить ваш класс POJO с базой данных, он должен иметь те же имена переменных, также переменные экземпляра чувствительны к регистру. Проблема в том, что в вашей базе данных у вас есть Name и Surname с заглавной буквой, в то время как в классе POJO они имеют строчную букву.

Поэтому вам необходимо изменить вашу базу данных на следующую:

{
  "Users" : {
    "01" : {
      "name" : "Alex",
      "surname" : "Kyto"
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...