【问题标题】:I am trying to search using an edit text from firebase realtime database我正在尝试使用 firebase 实时数据库中的编辑文本进行搜索
【发布时间】:2020-08-19 07:51:43
【问题描述】:

它应该在我搜索时显示数据并过滤,但它没有显示任何数据。我以为我写了一些相当不错的代码,但我找不到我的错误。

我有一个包含职位、公司、经验、年龄、薪酬和类型的模型类。 我制作了一个单独的布局 XML 文件。 Here 是 firebase 实时数据库结构。 here 是模型类。


这里是java代码


        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_showjobs);
            ref = FirebaseDatabase.getInstance().getReference("jobs");
    
            searchbtn = findViewById(R.id.searchjobbtn);
            searchtxt = findViewById(R.id.searchjobtxt);
            result = (RecyclerView) findViewById(R.id.results);
            result.setHasFixedSize(true);
            result.setLayoutManager(new LinearLayoutManager(this));
    
            searchbtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String searchedText = searchtxt.getText().toString();
                    firebasesearch(searchedText);
                }
            });
        }

        private void firebasesearch(String searchtxt) {
            Query firebaseSearchQuery=ref.orderByChild("jobTitle").startAt(searchtxt).endAt(searchtxt+"\uf8ff");
    
            FirebaseRecyclerOptions<jobclass> options = new FirebaseRecyclerOptions.Builder<jobclass>().setQuery(firebaseSearchQuery, jobclass.class).build();
    
    
            FirebaseRecyclerAdapter<jobclass, jobviewholder> recycleradaptor = new FirebaseRecyclerAdapter<jobclass, jobviewholder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull jobviewholder holder, int position, @NonNull jobclass model) {
                    holder.setDetails(model.getJobTitle(), model.getCompany(), model.getPay(), model.getType(), model.getExperience(), model.getAge());
                }
    
    
                @NonNull
                @Override
                public jobviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.listlayout, parent, false);
                    jobviewholder jv = new jobviewholder(v);
                    return jv;
                }
            };
            result.setAdapter(recycleradaptor);
            Toast.makeText(showjobs.this, "Searching", Toast.LENGTH_LONG).show();
    
        }
      /*  @Override
        protected void onStart() {
            super.onStart();
            FirebaseRecyclerOptions<jobclass> options = new FirebaseRecyclerOptions.Builder<jobclass>().setQuery(ref, jobclass.class).build();
    
            Toast.makeText(showjobs.this, "Searching", Toast.LENGTH_LONG).show();
            FirebaseRecyclerAdapter<jobclass, jobviewholder> recycleradaptor = new FirebaseRecyclerAdapter<jobclass, jobviewholder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull jobviewholder holder, int position, @NonNull jobclass model) {
                    holder.setDetails(model.getJobTitle(), model.getCompany(), model.getPay(), model.getType(), model.getExperience(), model.getAge());
                }
    
    
                @NonNull
                @Override
                public jobviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.listlayout, parent, false);
                    jobviewholder jv = new jobviewholder(v);
                    return jv;
                }
            };
            result.setAdapter(recycleradaptor);
        }*/
    
    
        public class jobviewholder extends RecyclerView.ViewHolder {
    
            View v;
    
            public jobviewholder(View itemView){
                super(itemView);
                v=itemView;
            }
            public void setDetails(String jobn, String companyn, String pay, String Ag, String xreq, String jtyp){
                TextView jobtitle=findViewById(R.id.jname);
                TextView companyname=findViewById(R.id.cname);
                TextView payment=findViewById(R.id.sal);
                TextView age=findViewById(R.id.agereq);
                TextView exprequired=findViewById(R.id.reqex);
                TextView jobtype=findViewById(R.id.type);
    
                jobtitle.setText(jobn);
                companyname.setText(companyn);
                payment.setText(pay);
                age.setText(Ag);
                exprequired.setText(xreq);
                jobtype.setText(jtyp);
            }
        }
    }


感谢您的宝贵时间。希望有人能帮我找出问题。

【问题讨论】:

  • 代替 onclicklistner 试试 Onvalueeventlistener
  • 请将您的数据库结构添加为 JSON 文件或至少是屏幕截图。请回复@AlexMamo
  • @AlexMamo 在描述中添加了图片。
  • @ABHIRAMAREDDYREDDY 您是否尝试开始监听更改?
  • 对不起,我不明白该怎么做

标签: java android firebase firebase-realtime-database android-recyclerview


【解决方案1】:
result.setAdapter(recycleradaptor);
            Toast.makeText(showjobs.this, "Searching", Toast.LENGTH_LONG).show();

对于这个recycleradaptor,您也必须开始收听。您必须在onStart() 中这样做

所以你可以这样做

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

【讨论】:

    【解决方案2】:

    这是使用 Firebase 数据库进行搜索的工作代码`

       private void  searchFriend(String text_search) {
        Query query = FirebaseDatabase.getInstance().getReference(Common.USERS)
                .orderByChild("name")
                .startAt(text_search)
                .endAt(text_search + "\uf8ff");
    
    
        FirebaseRecyclerOptions<User> options = new FirebaseRecyclerOptions.Builder<User>()
                .setQuery(query, User.class)
                .setLifecycleOwner(this)
                .build();
    
        searchAdapterQuery = new FirebaseRecyclerAdapter<User, UserViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull final UserViewHolder holder, int position, @NonNull final User user) {
                holder.userName.setText(user.getName());
    
              
    
                    }
    
    
                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
    
                    }
                });
    
            }
    
            @NonNull
            @Override
            public UserViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                View itemView = LayoutInflater.from(viewGroup.getContext())
                        .inflate(R.layout.all_user_recycler_view_item, viewGroup, false);
    
                return new UserViewHolder(itemView);
            }
        };
    
        searchAdapterQuery.startListening();
        recyclerView.setAdapter(searchAdapterQuery);
    }`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2012-11-30
      • 2020-10-15
      • 1970-01-01
      • 2019-03-23
      • 2023-04-05
      相关资源
      最近更新 更多