简体   繁体   English

未找到二传手/字段

[英]No setter/field found

Hi everyone I try to retrieve data from Firebase dataset and I keep getting this error even tho I tried every single solution from StackOverflow and what I was able to find on Google but without any benefit.大家好,我尝试从 Firebase 数据集中检索数据,即使我尝试了 StackOverflow 中的每一个解决方案以及我能够在 Google 上找到但没有任何好处的解决方案,我仍然不断收到此错误。

Below I will link the Activity and the Class and the datasets.下面我将链接 Activity 和 Class 以及数据集。

I'm new to Android and I can't understand why is not working since some people solved the problem and I did the same thing but nothing worked.我是 Android 新手,我不明白为什么不工作,因为有些人解决了这个问题,我做了同样的事情,但没有任何效果。

Thank you in advance.先感谢您。

CODE ACTIVITY代码活动

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);


        }

    }
}

enter code here在此处输入代码

DATABASE:数据库:

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

The problem that I have:我遇到的问题:

No setter/field for Surname found on class com.example.ipill.Users (fields/setters are case sensitive!) No setter/field for Name found on class com.example.ipill.Users (fields/setters are case sensitive!)在类 com.example.ipill.Users 上找不到用于姓氏的设置器/字段(字段/设置器区分大小写!)在类 com.example.ipill.Users 上找不到用于名称的设置器/字段(字段/设置器区分大小写!)

Model 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(){

    }

} 

enter code here在此处输入代码

To be able to map your POJO class to the database, it needs to have the same variable names, also the instance variables are case sensitive.为了能够将您的 POJO 类映射到数据库,它需要具有相同的变量名称,并且实例变量区分大小写。 The problem is that in your database, you have Name and Surname with capital letter while in the POJO class you have them with lowercase letter.问题在于,在您的数据库中,您的NameSurname是大写字母,而在 POJO 类中,您的NameSurname是小写字母。

Therefore, you need to change your database to the following:因此,您需要将数据库更改为以下内容:

{
  "Users" : {
    "01" : {
      "name" : "Alex",
      "surname" : "Kyto"
    }
  }
}

Change your Users property like below to match with Firebase .如下更改您的Users属性以匹配Firebase You database and POJO should align to work with.您的数据库和 POJO 应该配合使用。

public String Name, Surname; //Capitalize each property

I was getting this error because I was accessing wrong variable(parent variable)我收到此错误是因为我访问了错误的变量(父变量)

public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
                   list.add(snapshot.getValue(CategoryModel.class));
                   // Here in list I should have added dataSnapshot.getValue(CategoryModel.class)
               }

            
}

Hope it helps.希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM