Android - 如何过滤Firebase的RecyclerView? [英] Android - How to filter the RecyclerView of Firebase?

查看:151
本文介绍了Android - 如何过滤Firebase的RecyclerView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近在我的Android Firebase应用中添加了一个searchBar,但是我实际上找不到如何在我的应用中过滤数据。我需要在title,desc和username子目录中进行搜索,如
photo。



我该怎么办?感谢



[随机字母hsiukhdufhjwrepjèijgitrjwbnrtnbnbeènbèrnbgnèjwtigogjwitjgbniownttngfnwnpnwpjgnjntwjtngjnjwngjggpnwrjgrngjwpnjnvwpjeenjrvnjpreqngjnpwjgnrjpwnjpn2ngj2nrjnp2r2g2hhuheqdhyg1eydgugf]






的更新的代码MainActivity:

  public class MainActivity extends AppCompatActivity {

private RecyclerView mBlogList;

private DatabaseReference mDatabase;

private DatabaseReference mDatabaseUsers;

private DatabaseReference mDatabaseLike;

私人查询mQuery;

私有SearchView mSearchView;

private FirebaseAuth mAuth;
私有FirebaseAuth.AuthStateListener mAuthListener;

private boolean mProcessLike = false;

私人TextView徽章;

protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener(){
@Override $ b $ public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){

if(firebaseAuth.getCurrentUser()== null){


意图loginIntent = new Intent(MainActivity.this,LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(loginIntent);

}

}
};


mDatabase = FirebaseDatabase.getInstance()。getReference()。child(Blog);
mDatabaseUsers = FirebaseDatabase.getInstance()。getReference()。child(Users);
mDatabaseLike = FirebaseDatabase.getInstance()。getReference()。child(Likes);

mDatabaseUsers.keepSynced(true);
mDatabaseLike.keepSynced(true);
mDatabase.keepSynced(true);

mBlogList =(RecyclerView)findViewById(R.id.blog_list);

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);

mBlogList.setHasFixedSize(true);
mBlogList.setLayoutManager(新的LinearLayoutManager(this));

badge =(TextView)findViewById(R.id.badge);


$ b @Override
protected void onStart(){
super.onStart();

mAuth.addAuthStateListener(mAuthListener);

最终FirebaseRecyclerAdapter< Blog,BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter< Blog,BlogViewHolder>(
Blog.class,
R.layout.blog_row,
BlogViewHolder.class,
mQuery

) {
@Override
protected void populateViewHolder(final BlogViewHolder viewHolder,Blog model,int position){

final String post_key = getRef(position).getKey();

viewHolder.setTitle(model.getTitle());
viewHolder.setDesc(model.getDesc());
viewHolder.setImage(getApplicationContext(),model.getImage());
viewHolder.setUsername(model.getUsername());

viewHolder.setLikeBtn(post_key);

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

Intent singleBlogIntent = new Intent(MainActivity.this,BlogSingleActivity.class);
singleBlogIntent.putExtra(blog_id,post_key);
startActivity(singleBlogIntent);

}
} );

mDatabaseUsers.child(model.getUid())。child(image)。addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String imageUrl = dataSnapshot.getValue()。toString();
viewHolder.setUserimage(getApplicationContext(),imageUrl);
}

@Override
public void onCancelled(DatabaseError databaseError){
$ b}
});

$ b viewHolder.mLikeBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){





$ db
$ b $ db
















bDatabaseLike.addValueEventListener(new ValueEventListener如果(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser()。getUid())){

mDatabaseLike.child(post_key).child (); getUid())。removeValue();

mProcessLike = false;

} else {

mDatabaseLike.child (post_key).child(mAuth.getCurrentUser()的getuid())。SE tValue( 随机值);

mProcessLike = false;




@Override
public void onCancelled(DatabaseError databaseError){

}
});
}
});
}
};

mBlogList.setAdapter(firebaseRecyclerAdapter);


private void checkUserExist(){
final String user_id = this.mAuth.getCurrentUser()。getUid();
this.mDatabaseUsers.addValueEventListener(new ValueEventListener(){
public void onDataChange(DataSnapshot dataSnapshot){
if(!dataSnapshot.hasChild(user_id)){
Intent setupIntent = new Intent(MainActivity.this,SetupActivity.class);
setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(setupIntent);
MainActivity.this.startActivity(setupIntent);
}
$ b $ if(user_id == null){Intent errorIntent = new Intent(MainActivity.this,ErrorActivity.class);
errorIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity (errorIntent);
MainActivity.this.startActivity(errorIntent);
}}

public void onCancelled(DatabaseError databaseError){
}
}) ;


$ b $ public static class BlogViewHolder extends RecyclerView.ViewHolder {

View mView;

ImageButton mLikeBtn;

DatabaseReference mDatabaseLike;
FirebaseAuth mAuth;

public BlogViewHolder(View itemView){
super(itemView);

mView = itemView;

mLikeBtn =(ImageButton)mView.findViewById(R.id.like_btn);

mDatabaseLike = FirebaseDatabase.getInstance()。getReference()。child(Likes);
mAuth = FirebaseAuth.getInstance();

mDatabaseLike.keepSynced(true);





$ b public void setUserimage(Context context,String imageUrl){
ImageView imageViewPostUserImage =(ImageView) mView.findViewById(R.id.imageview_post_userimage);
Glide
.with(context)
.load(imageUrl)
.into(imageViewPostUserImage);


public void setLikeBtn(final String post_key){

mDatabaseLike.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
$ b $ if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser()。getUid())){

mLikeBtn.setImageResource R.mipmap.ic_thumb_up_black_24dp);

} else {

mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_white_24dp);

}
}

@Override
public void onCancelled(DatabaseError databaseError){
$ b}
});




$ b public void setTitle(String title){

TextView post_title =(TextView)mView.findViewById (R.id.post_title);
post_title.setText(title);
}

public void setDesc(String desc){

TextView post_desc =(TextView)mView.findViewById(R.id.post_desc);
post_desc.setText(desc);


$ b public void setUsername(String username){

TextView post_username =(TextView)mView.findViewById(R.id.post_username);
post_username.setText(username);


$ b public void setImage(Context ctx,String image){

ImageView post_image =(ImageView)mView.findViewById(R.id。 post_image);
Picasso.with(ctx).load(image).into(post_image);





$ b覆盖
public boolean onCreateOptionsMenu(菜单菜单){

getMenuInflater()。inflate(R.menu.main_menu,menu);

SearchView searchView =(SearchView)MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String query){

意图searchIntent = new Intent (MainActivity.this,searchActivity.class);
searchIntent.putExtra(search,query);
startActivity(searchIntent);
return false;

}

@Override
public boolean onQueryTextChange(String newText){
// ??????
return true;
}
});

return super.onCreateOptionsMenu(menu);





$覆盖
public boolean onOptionsItemSelected(MenuItem item){
$ b $ (item.getItemId()== R.id.action_add){

startActivity(new Intent(MainActivity.this,PostActivity.class));


$ b if(item.getItemId()== R.id.action_logout){

logout();

}

return super.onOptionsItemSelected(item);


private void logout(){

mAuth.signOut();

$ b $ / code $ / pre
$ b $ p




searchActivity

  public class searchActivity extends AppCompatActivity {

private RecyclerView mBlogList;

private DatabaseReference mDatabase;

private DatabaseReference mDatabaseUsers;

private DatabaseReference mDatabaseLike;

私人查询mQuery;

私人查询mQuerySearch;

私有SearchView mSearchView;

private FirebaseAuth mAuth;
私有FirebaseAuth.AuthStateListener mAuthListener;

private boolean mProcessLike = false;

私人TextView徽章;

私有字符串搜索;

protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener(){
@Override $ b $ public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){

if(firebaseAuth.getCurrentUser()== null){


意图loginIntent = new Intent(com.fgvelectro.f.searchActivity.this,LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(loginIntent);

}

}
};


mDatabase = FirebaseDatabase.getInstance()。getReference()。child(Blog);
search = getIntent()。getExtras()。getString(search);
mQuerySearch = mDatabase.orderByChild(title)。equalTo(search);
mAuth.addAuthStateListener(mAuthListener);

mDatabaseUsers = FirebaseDatabase.getInstance()。getReference()。child(Users);
mDatabaseLike = FirebaseDatabase.getInstance()。getReference()。child(Likes);

mDatabaseUsers.keepSynced(true);
mDatabaseLike.keepSynced(true);
mDatabase.keepSynced(true);

mQuery = mDatabase.orderByChild(title)。equalTo(try1);

mBlogList =(RecyclerView)findViewById(R.id.blog_list);

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);

mBlogList.setHasFixedSize(true);
mBlogList.setLayoutManager(新的LinearLayoutManager(this));

badge =(TextView)findViewById(R.id.badge);


$ b @Override
protected void onStart(){
super.onStart();

FirebaseRecyclerAdapter< Blog,searchActivity.BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter< Blog,BlogViewHolder>(

Blog.class,
.layout.blog_row,
searchActivity.BlogViewHolder.class,
mQuerySearch

){
@Override
protected void populateViewHolder(BlogViewHolder viewHolder,Blog model,int position){

}

protected void populateViewHolder(final com.fgvelectro.f.MainActivity.BlogViewHolder viewHolder,Blog model,int position){

final String post_key = getRef(position).getKey();

viewHolder.setTitle(model.getTitle());
viewHolder.setDesc(model.getDesc());
viewHolder.setImage(getApplicationContext(),model.getImage());
viewHolder.setUsername(model.getUsername());

viewHolder.setLikeBtn(post_key);

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

Intent singleBlogIntent =新的意图(com.fgvelectro.f.searchActivity.this,BlogSingleActivity.class);
singleBlogIntent.putExtra(blog_id,post_key);
startActivity(singleBlogIntent);

}
});

mDatabaseUsers.child(model.getUid())。child(image)。addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String imageUrl = dataSnapshot.getValue()。toString();
viewHolder.setUserimage(getApplicationContext(),imageUrl);
}

@Override
public void onCancelled(DatabaseError databaseError){
$ b}
});

$ b viewHolder.mLikeBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){





$ db
$ b $ db
















bDatabaseLike.addValueEventListener(new ValueEventListener如果(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser()。getUid())){

mDatabaseLike.child(post_key).child (); getUid())。removeValue();

mProcessLike = false;

} else {

mDatabaseLike.child (post_key).child(mAuth.getCurrentUser()的getuid())。SE tValue( 随机值);

mProcessLike = false;




@Override
public void onCancelled(DatabaseError databaseError){

}
});
}
});
}
};

mBlogList.setAdapter(firebaseRecyclerAdapter);


private void checkUserExist(){
final String user_id = this.mAuth.getCurrentUser()。getUid();
this.mDatabaseUsers.addValueEventListener(new ValueEventListener(){
public void onDataChange(DataSnapshot dataSnapshot){
if(!dataSnapshot.hasChild(user_id)){
Intent setupIntent = new Intent(com.fgvelectro.f.searchActivity.this,SetupActivity.class);
setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(setupIntent);
com.fgvelectro.f.searchActivity .this.startActivity(setupIntent);
}

if(user_id == null){Intent errorIntent = new Intent(com.fgvelectro.f.searchActivity.this,ErrorActivity.class);
errorIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(errorIntent);
com.fgvelectro.f.searchActivity.this.startActivity(errorIntent);
}}

public void onCancelled(DatabaseError databaseError){
}
});


$ b $ public static class BlogViewHolder extends RecyclerView.ViewHolder {

View mView;

ImageButton mLikeBtn;

DatabaseReference mDatabaseLike;
FirebaseAuth mAuth;

public BlogViewHolder(View itemView){
super(itemView);

mView = itemView;

mLikeBtn =(ImageButton)mView.findViewById(R.id.like_btn);

mDatabaseLike = FirebaseDatabase.getInstance()。getReference()。child(Likes);
mAuth = FirebaseAuth.getInstance();

mDatabaseLike.keepSynced(true);





$ b public void setUserimage(Context context,String imageUrl){
ImageView imageViewPostUserImage =(ImageView) mView.findViewById(R.id.imageview_post_userimage);
Glide
.with(context)
.load(imageUrl)
.into(imageViewPostUserImage);


public void setLikeBtn(final String post_key){

mDatabaseLike.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
$ b $ if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser()。getUid())){

mLikeBtn.setImageResource R.mipmap.ic_thumb_up_black_24dp);

} else {

mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_white_24dp);

}
}

@Override
public void onCancelled(DatabaseError databaseError){
$ b}
});




$ b public void setTitle(String title){

TextView post_title =(TextView)mView.findViewById (R.id.post_title);
post_title.setText(title);
}

public void setDesc(String desc){

TextView post_desc =(TextView)mView.findViewById(R.id.post_desc);
post_desc.setText(desc);


$ b public void setUsername(String username){

TextView post_username =(TextView)mView.findViewById(R.id.post_username);
post_username.setText(username);


$ b public void setImage(Context ctx,String image){

ImageView post_image =(ImageView)mView.findViewById(R.id。 post_image);
Picasso.with(ctx).load(image).into(post_image);





$ b覆盖
public boolean onCreateOptionsMenu(菜单菜单){

getMenuInflater()。inflate(R.menu.main_menu,menu);

SearchView searchView =(SearchView)MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String query){

意图searchIntent = new Intent (com.fgvelectro.f.searchActivity.this,searchActivity.class);
searchIntent.putExtra(search,query);
startActivity(searchIntent);
return false;

}

@Override
public boolean onQueryTextChange(String newText){
// ??????
return true;
}
});

return super.onCreateOptionsMenu(menu);





$覆盖
public boolean onOptionsItemSelected(MenuItem item){
$ b $如果(item.getItemId()== R.id.action_add){

startActivity(new Intent(com.fgvelectro.f.searchActivity.this,PostActivity.class));


$ b if(item.getItemId()== R.id.action_logout){

logout();

}

return super.onOptionsItemSelected(item);


private void logout(){

mAuth.signOut();

$ b $ / code $ / pre
$ b $ p
图片出错

解决方案

首先,你需要查询你的数据库,例如

mQuery = mDatabase.orderByChild(Title)。equalTo(您的值)然后转到您的firebaseRecyclerAdapter并替换:

  FirebaseRecyclerAdapter< Blog,BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter< Blog,BlogViewHolder>(
Blog.class,
R.layout.blog_row,
BlogViewHolder.class,
mDatabase




  final FirebaseRecyclerAdapter< Blog,BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter< Blog,BlogViewHolder>(
Blog.class,
R.layout.blog_row,
BlogViewHolder.class,
mQuery


要了解更多信息,请点击此处查看文档: https://firebase.google.com/docs/reference/android/com/google/firebase/数据库/查询



和FirebaseUI文档: https://github.com/firebase/FirebaseUI-Android



这就是我所做的:
$ (菜单菜单){

getMenuInflater()。inflate(R.menu.main_menu,menu );

SearchView searchView =(SearchView)MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String query){

意图searchIntent = new Intent (MainActivity.this,searchActivity.class);
searchIntent.putExtra(search,query);
startActivity(searchIntent);
return false;

}

@Override
public boolean onQueryTextChange(String newText){
// ??????
return true;
}
});

return super.onCreateOptionsMenu(menu);



}

activity:

  String search = getIntent()。getExtras()。getString(search); 
mQuerySearch = mDatabase.orderByChild(name)。equalTo(search);

FirebaseRecyclerAdapter< Classified,searchActivity.ClassifiedViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter< Classified,searchActivity.ClassifiedViewHolder>(

Classified.class,
R.layout.classified_row,
searchActivity.ClassifiedViewHolder.class,
mQuerySearch



I've recently added a searchBar to my Android Firebase app, but I really can't find how to filter data in my app. I need to search in "title", "desc" and "username" childs, as seen in the photo.

What should I do? Thanks

[Random letters hsiukhdufhjwrepjèijgitrjwbnrtnbnbeènbèrnbgnèjwtigogjwitjgbniownttngfnwnpnwpjgnjntwjtngjnjwngjggpnwrjgrngjwpnjnvwpjeenjrvnjpreqngjnpwjgnrjpwnjpn2ngj2nrjnp2r2g2hhuheqdhyg1eydgugf]


updated code of MainActivity:

public class MainActivity extends AppCompatActivity{

private RecyclerView mBlogList;

private DatabaseReference mDatabase;

private DatabaseReference mDatabaseUsers;

private DatabaseReference mDatabaseLike;

private Query mQuery;

private SearchView mSearchView;

private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;

private boolean mProcessLike = false;

private TextView badge;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

            if(firebaseAuth.getCurrentUser() == null){


                Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
                loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(loginIntent);

            }

        }
    };


    mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
    mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users");
    mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes");

    mDatabaseUsers.keepSynced(true);
    mDatabaseLike.keepSynced(true);
    mDatabase.keepSynced(true);

    mBlogList = (RecyclerView) findViewById(R.id.blog_list);

    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setReverseLayout(true);
    layoutManager.setStackFromEnd(true);

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

    badge = (TextView)findViewById ( R.id.badge );

    }

@Override
protected void onStart() {
    super.onStart();

    mAuth.addAuthStateListener(mAuthListener);

    final FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
            Blog.class,
            R.layout.blog_row,
            BlogViewHolder.class,
            mQuery

    ) {
        @Override
        protected void populateViewHolder(final BlogViewHolder viewHolder, Blog model, int position) {

            final String post_key = getRef(position).getKey();

            viewHolder.setTitle(model.getTitle());
            viewHolder.setDesc(model.getDesc());
            viewHolder.setImage(getApplicationContext(), model.getImage());
            viewHolder.setUsername(model.getUsername());

            viewHolder.setLikeBtn(post_key);

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

                    Intent singleBlogIntent = new Intent(MainActivity.this, BlogSingleActivity.class);
                    singleBlogIntent.putExtra("blog_id", post_key);
                    startActivity(singleBlogIntent);

                }
            });

            mDatabaseUsers.child(model.getUid()).child("image").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String imageUrl = dataSnapshot.getValue().toString();
                    viewHolder.setUserimage(getApplicationContext(), imageUrl);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });


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

                    mProcessLike = true;

                    mDatabaseLike.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {

                            if (mProcessLike) {

                                if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {

                                    mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();

                                    mProcessLike = false;

                                } else {

                                    mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("RandomValue");

                                    mProcessLike = false;

                                }
                            }
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                }
            });
        }
    };

    mBlogList.setAdapter(firebaseRecyclerAdapter);
}

private void checkUserExist() {
    final String user_id = this.mAuth.getCurrentUser().getUid();
    this.mDatabaseUsers.addValueEventListener(new ValueEventListener() {
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (!dataSnapshot.hasChild(user_id)) {
                Intent setupIntent = new Intent(MainActivity.this, SetupActivity.class);
                setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(setupIntent);
                MainActivity.this.startActivity(setupIntent);
            }

            if (user_id == null){Intent errorIntent = new Intent (MainActivity.this, ErrorActivity.class);
                errorIntent.addFlags ( Intent.FLAG_ACTIVITY_CLEAR_TOP );
                startActivity(errorIntent);
                MainActivity.this.startActivity (errorIntent);
            }}

        public void onCancelled(DatabaseError databaseError) {
        }
    });
}


public static class BlogViewHolder extends RecyclerView.ViewHolder{

    View mView;

    ImageButton mLikeBtn;

    DatabaseReference mDatabaseLike;
    FirebaseAuth mAuth;

    public BlogViewHolder(View itemView) {
        super(itemView);

        mView = itemView;

        mLikeBtn = (ImageButton) mView.findViewById(R.id.like_btn);

        mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes");
        mAuth = FirebaseAuth.getInstance();

        mDatabaseLike.keepSynced(true);




    }

    public void setUserimage(Context context, String imageUrl) {
        ImageView imageViewPostUserImage = (ImageView) mView.findViewById(R.id.imageview_post_userimage);
        Glide
                .with(context)
                .load(imageUrl)
                .into(imageViewPostUserImage);
    }

    public void setLikeBtn(final String post_key) {

        mDatabaseLike.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {

                    mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_black_24dp);

                } else {

                    mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_white_24dp);

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }



    public void setTitle(String title){

        TextView post_title = (TextView) mView.findViewById(R.id.post_title);
        post_title.setText(title);
    }

    public void setDesc(String desc){

        TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
        post_desc.setText(desc);

    }

    public void setUsername(String username){

        TextView post_username = (TextView) mView.findViewById(R.id.post_username);
        post_username.setText(username);

    }

    public void setImage(Context ctx, String image){

        ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
        Picasso.with(ctx).load(image).into(post_image);
    }



}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main_menu, menu);

    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            Intent searchIntent = new Intent(MainActivity.this, searchActivity.class);
            searchIntent.putExtra("search", query);
            startActivity(searchIntent);
            return false;

        }

        @Override
        public boolean onQueryTextChange(String newText) {
            //??????
            return true;
        }
    });

    return super.onCreateOptionsMenu(menu);



}


@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(item.getItemId() == R.id.action_add){

        startActivity(new Intent(MainActivity.this, PostActivity.class));

    }

    if (item.getItemId() == R.id.action_logout){

        logout();

    }

    return super.onOptionsItemSelected(item);
}

private void logout() {

    mAuth.signOut();

}

}


searchActivity

public class searchActivity extends AppCompatActivity{

private RecyclerView mBlogList;

private DatabaseReference mDatabase;

private DatabaseReference mDatabaseUsers;

private DatabaseReference mDatabaseLike;

private Query mQuery;

private Query mQuerySearch;

private SearchView mSearchView;

private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;

private boolean mProcessLike = false;

private TextView badge;

private String search;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

            if(firebaseAuth.getCurrentUser() == null){


                Intent loginIntent = new Intent( com.fgvelectro.f.searchActivity.this, LoginActivity.class);
                loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(loginIntent);

            }

        }
    };


    mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
    search = getIntent().getExtras().getString("search");
    mQuerySearch = mDatabase.orderByChild("title").equalTo(search);
    mAuth.addAuthStateListener(mAuthListener);

    mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users");
    mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes");

    mDatabaseUsers.keepSynced(true);
    mDatabaseLike.keepSynced(true);
    mDatabase.keepSynced(true);

    mQuery = mDatabase.orderByChild("title").equalTo("try1");

    mBlogList = (RecyclerView) findViewById(R.id.blog_list);

    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setReverseLayout(true);
    layoutManager.setStackFromEnd(true);

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

    badge = (TextView)findViewById ( R.id.badge );

}

@Override
protected void onStart() {
    super.onStart();

    FirebaseRecyclerAdapter<Blog, searchActivity.BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(

            Blog.class,
            R.layout.blog_row,
            searchActivity.BlogViewHolder.class,
            mQuerySearch

    ) {
        @Override
        protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {

        }

        protected void populateViewHolder(final com.fgvelectro.f.MainActivity.BlogViewHolder viewHolder, Blog model, int position) {

            final String post_key = getRef(position).getKey();

            viewHolder.setTitle(model.getTitle());
            viewHolder.setDesc(model.getDesc());
            viewHolder.setImage(getApplicationContext(), model.getImage());
            viewHolder.setUsername(model.getUsername());

            viewHolder.setLikeBtn(post_key);

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

                    Intent singleBlogIntent = new Intent( com.fgvelectro.f.searchActivity.this, BlogSingleActivity.class);
                    singleBlogIntent.putExtra("blog_id", post_key);
                    startActivity(singleBlogIntent);

                }
            });

            mDatabaseUsers.child(model.getUid()).child("image").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String imageUrl = dataSnapshot.getValue().toString();
                    viewHolder.setUserimage(getApplicationContext(), imageUrl);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });


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

                    mProcessLike = true;

                    mDatabaseLike.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {

                            if (mProcessLike) {

                                if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {

                                    mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();

                                    mProcessLike = false;

                                } else {

                                    mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("RandomValue");

                                    mProcessLike = false;

                                }
                            }
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                }
            });
        }
    };

    mBlogList.setAdapter(firebaseRecyclerAdapter);
}

private void checkUserExist() {
    final String user_id = this.mAuth.getCurrentUser().getUid();
    this.mDatabaseUsers.addValueEventListener(new ValueEventListener() {
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (!dataSnapshot.hasChild(user_id)) {
                Intent setupIntent = new Intent( com.fgvelectro.f.searchActivity.this, SetupActivity.class);
                setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(setupIntent);
                com.fgvelectro.f.searchActivity.this.startActivity(setupIntent);
            }

            if (user_id == null){Intent errorIntent = new Intent ( com.fgvelectro.f.searchActivity.this, ErrorActivity.class);
                errorIntent.addFlags ( Intent.FLAG_ACTIVITY_CLEAR_TOP );
                startActivity(errorIntent);
                com.fgvelectro.f.searchActivity.this.startActivity (errorIntent);
            }}

        public void onCancelled(DatabaseError databaseError) {
        }
    });
}


public static class BlogViewHolder extends RecyclerView.ViewHolder{

    View mView;

    ImageButton mLikeBtn;

    DatabaseReference mDatabaseLike;
    FirebaseAuth mAuth;

    public BlogViewHolder(View itemView) {
        super(itemView);

        mView = itemView;

        mLikeBtn = (ImageButton) mView.findViewById(R.id.like_btn);

        mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes");
        mAuth = FirebaseAuth.getInstance();

        mDatabaseLike.keepSynced(true);




    }

    public void setUserimage(Context context, String imageUrl) {
        ImageView imageViewPostUserImage = (ImageView) mView.findViewById(R.id.imageview_post_userimage);
        Glide
                .with(context)
                .load(imageUrl)
                .into(imageViewPostUserImage);
    }

    public void setLikeBtn(final String post_key) {

        mDatabaseLike.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {

                    mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_black_24dp);

                } else {

                    mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_white_24dp);

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }



    public void setTitle(String title){

        TextView post_title = (TextView) mView.findViewById(R.id.post_title);
        post_title.setText(title);
    }

    public void setDesc(String desc){

        TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
        post_desc.setText(desc);

    }

    public void setUsername(String username){

        TextView post_username = (TextView) mView.findViewById(R.id.post_username);
        post_username.setText(username);

    }

    public void setImage(Context ctx, String image){

        ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
        Picasso.with(ctx).load(image).into(post_image);
    }



}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main_menu, menu);

    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            Intent searchIntent = new Intent( com.fgvelectro.f.searchActivity.this, searchActivity.class);
            searchIntent.putExtra("search", query);
            startActivity(searchIntent);
            return false;

        }

        @Override
        public boolean onQueryTextChange(String newText) {
            //??????
            return true;
        }
    });

    return super.onCreateOptionsMenu(menu);



}


@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(item.getItemId() == R.id.action_add){

        startActivity(new Intent( com.fgvelectro.f.searchActivity.this, PostActivity.class));

    }

    if (item.getItemId() == R.id.action_logout){

        logout();

    }

    return super.onOptionsItemSelected(item);
}

private void logout() {

    mAuth.signOut();

}

} Photo: Of the error

解决方案

First, you need to query your database, example

mQuery = mDatabase.orderByChild("Title").equalTo("your value") then go to your firebaseRecyclerAdapter and replace:

FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
            Blog.class,
            R.layout.blog_row,
            BlogViewHolder.class,
            mDatabase

    )

with:

final FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
            Blog.class,
            R.layout.blog_row,
            BlogViewHolder.class,
            mQuery

    )

To find out more you can check the documentation here: https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query

and the FirebaseUI documentation: https://github.com/firebase/FirebaseUI-Android

This is what i did:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main_menu, menu);

        SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {

                Intent searchIntent = new Intent(MainActivity.this, searchActivity.class);
                searchIntent.putExtra("search", query);
                startActivity(searchIntent);
                return false;

            }

            @Override
            public boolean onQueryTextChange(String newText) {
                //??????
                return true;
            }
        });

        return super.onCreateOptionsMenu(menu);



    }

and in the search activity:

String search = getIntent().getExtras().getString("search");
mQuerySearch = mDatabase.orderByChild("name").equalTo(search);

FirebaseRecyclerAdapter<Classified, searchActivity.ClassifiedViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Classified, searchActivity.ClassifiedViewHolder>(

                Classified.class,
                R.layout.classified_row,
                searchActivity.ClassifiedViewHolder.class,
                mQuerySearch

        )

这篇关于Android - 如何过滤Firebase的RecyclerView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆