Поиск в Firebase Null с помощью прослушивателя onClick - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь найти информацию в моей базе данных Firebase, и я не могу это сделать.

Это класс, в котором я ищу:

private FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder> firebaseRecyclerAdapter;
    public static Query query;

    public static String searchData;
    DatabaseReference mProfileDatabase;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_attendee_landing);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        final RecyclerView recyclerView = findViewById(R.id.results_recycler);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        final EditText t = (EditText) findViewById(R.id.DjNameET);

        mProfileDatabase = FirebaseDatabase.getInstance().getReference();

        t.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                if(i == EditorInfo.IME_ACTION_SEARCH)
                {
                    searchData = t.getText().toString();


                    return true;
                }
                return false;
            }
        });

        ImageButton imgB= (ImageButton) findViewById(R.id.searchBtn);

        imgB.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view)
            {
               query = mProfileDatabase.orderByChild("djprofile")
                        .startAt(searchData)
                        .endAt(searchData + "\uf8ff");


            }
        });
        FirebaseRecyclerOptions<DjProfile> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<DjProfile>()
                .setQuery(query, DjProfile.class)
                .build();
        firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder>(firebaseRecyclerOptions)
        {

            @NonNull
            @Override
            public ResultsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.searchitem_list, viewGroup, false);

                return new ResultsViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull ResultsViewHolder holder, int position, @NonNull DjProfile model) {
                holder.setDjProfile(model);
            }
        };
        recyclerView.setAdapter(firebaseRecyclerAdapter);


    }

    @Override
    protected void onStart()
    {
        super.onStart();
        firebaseRecyclerAdapter.startListening();
    }

Вот исключение, которое я получаю:(говорит, что это происходит в методе onStart ())

java.lang.NullPointerException: попытка вызвать виртуальный метод com.google.firebase.database.ChildEventListener com.google.firebase.database.Query.addChildEventListener (com.google.firebase.database.ChildEventListener) 'для ссылки на пустой объект

Любая помощь в том, почему это значение равно нулю, будет принята с благодарностью!

1 Ответ

1 голос
/ 28 марта 2019

Чтобы иметь возможность инициализировать адаптер, вам необходимо иметь действительный запрос.И чтобы создать запрос, вам нужно иметь searchData.Это означает, что инициализация firebaseRecyclerAdapter должна происходить внутри onClick.

imgB.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View view)
    {
       query = mProfileDatabase.orderByChild("djprofile")
                .startAt(searchData)
                .endAt(searchData + "\uf8ff");

        FirebaseRecyclerOptions<DjProfile> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<DjProfile>()
                .setQuery(query, DjProfile.class)
                .build();
        firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder>(firebaseRecyclerOptions)
        {

            @NonNull
            @Override
            public ResultsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.searchitem_list, viewGroup, false);

                return new ResultsViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull ResultsViewHolder holder, int position, @NonNull DjProfile model) {
                holder.setDjProfile(model);
            }
        };
        recyclerView.setAdapter(firebaseRecyclerAdapter);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...