gpt4 book ai didi

Android - 如何过滤Firebase的RecyclerView?

转载 作者:行者123 更新时间:2023-11-30 00:22:51 26 4
gpt4 key购买 nike

我最近在我的 Android Firebase 应用程序中添加了一个搜索栏,但我真的找不到如何在我的应用程序中过滤数据。我需要搜索“title”、“desc”和“username”子项,如 photo.

我该怎么办?谢谢

[随机字母 hsiukhdufhjwrepjèijgitrjwbnrtnbnbeènbèrnbgnèjwtigogjwitjgbniownttngfnwnpnwpjgnjntwjtngjnjwngjggpnwrjgrngjwpnjnvwpjeenjrvnjpreqngjnpwjgnrjpwnjpn2 ngj2nrjnp2r2g2hhuheqdhyg1eydgugf]


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

}


搜索 Activity

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

}

}照片:Of the error

最佳答案

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

mQuery = mDatabase.orderByChild("Title").equalTo("your value") 然后转到您的 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/database/Query

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

这是我做的:

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



}

在搜索 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?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com