Получение данных из базы данных Firebase Realtime в Android - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь извлечь данные из базы данных Firebase Realtime и отобразить эти данные в представлении реселлера, но не могу этого сделать и не могу понять, почему, потому что я все перепробовал (Google / StackOverflow et c) и ничего не работает ,

Код вроде бы в порядке, но когда я запускаю приложение, оно выдает мне следующие сообщения: В классе com.example.ipill.Users не найдено никакого установщика / поля для фамилии.

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

Я новичок в Android Studio и не могу понять, что я делаю не так.

Ниже я приложу код и базу данных. То, чего я не понимаю, это то, что когда я добавляю новый объект в базу данных с именем = Алекс, я вижу новое представление переработчика, содержащее новый элемент внутри, это означает, что приложения понимают, что есть еще объекты с именем = Алекс, но я не могу получить этот объект из базы данных.

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

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

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


    }

}

}

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

БАЗА ДАННЫХ:

This is the image with the database enter image description here Проблема, которая у меня есть:

W/PersistentConnection: pc_0 - Using an unspecified index. Your data will be downloaded and filtered             
on the client. Consider adding '".indexOn": "Name"' at Users to your security and Firebase Database     
rules for better performance
W/ClassMapper: No setter/field for Surname found on class com.example.ipill.Users (fields/setters are 
case sensitive!)
W/ClassMapper: No setter/field for Name found on class com.example.ipill.Users (fields/setters are 
case sensitive!)
W/m.example.ipil: Accessing hidden field Landroid/view/View;- 
>mAccessibilityDelegate:Landroid/view/View$AccessibilityDelegate; (greylist, reflection, allowed)

Модель 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

В сообщении об ошибке достаточно четко указано, что вам нужно сделать:

Попробуйте добавить ".indexOn": "Name" 'в Users

Итак, вы необходимо добавить ".indexOn": "Name" в узел Users в ваших правилах.

Итак:

{
  "rules": {
    "Users": {
      ".indexOn": "Name"
    }
  }
}

Квадратные скобки в порядке ["Name"], но сейчас вы определяете Индекс на неправильном уровне.

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

Вам нужно создать класс модели и внутри установщика геттера

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