Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SearchData方法重置查询?Firebase数据库Android_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java SearchData方法重置查询?Firebase数据库Android

Java SearchData方法重置查询?Firebase数据库Android,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,一般来说,问题是,我有三个片段。在第二个代码段中,它获取提供的数据,下面是代码 1) MyPostFragment.class public class MyPostsFragment extends PostListFragment { public MyPostsFragment() {} @Override public Query getQuery(DatabaseReference databaseReference) { return databaseReference.c

一般来说,问题是,我有三个片段。在第二个代码段中,它获取提供的数据,下面是代码

1) MyPostFragment.class

public class MyPostsFragment extends PostListFragment {
public MyPostsFragment() {}

@Override
public Query getQuery(DatabaseReference databaseReference) {
    return databaseReference.child("songsDB")
            .orderByChild("stars/" + getUid())
            .equalTo(true);
}
2) 后列表片段

public abstract class PostListFragment extends Fragment {
private DatabaseReference mDatabase;
private FirebaseRecyclerAdapter mAdapter;
private RecyclerView mRecycler;
private Activity mActivity;
Query mRef;
SearchView searchView;
LinearLayoutManager mManager;
FirebaseDatabase mFirebaseDatabase;

public PostListFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    View rootView = inflater.inflate(R.layout.fragment_all_posts, container, false);
    mRecycler = rootView.findViewById(R.id.messages_list);

    mRecycler.setHasFixedSize(true);
    mDatabase = FirebaseDatabase.getInstance().getReference();


    return rootView;

}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true);

    // Set up Layout Manager, reverse layout
    mManager = new LinearLayoutManager(getActivity());
    mManager.setReverseLayout(true);
    mManager.setStackFromEnd(true);
    mRecycler.setLayoutManager(mManager);

    Query postsQuery = getQuery(mDatabase);
    ShowData(postsQuery);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_main, menu);
    MenuItem item = menu.findItem(R.id.action_search);
    searchView = (SearchView) MenuItemCompat.getActionView(item);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            SearchData(query);
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            //Filter as you type
            SearchData(newText);
            return false;
        }
    });
    super.onCreateOptionsMenu(menu,inflater);
}


private FirebaseRecyclerAdapter getMAdapter(Query query){
    mActivity = getActivity();
    final Dialog mDialog = new Dialog(mActivity, R.style.NewDialog);
    mDialog.addContentView(
            new ProgressBar(mActivity),
            new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
    );
    mDialog.setCancelable(true);
    mDialog.show();

    FirebaseRecyclerOptions<Post> options = new FirebaseRecyclerOptions.Builder<Post>()
            .setQuery(query, Post.class)
            .build();

    mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(options) {
        @Override
        protected void onBindViewHolder(PostViewHolder viewHolder, int position, final Post model) {
            final DatabaseReference postRef = getRef(position);

            // Determine if the current user has liked this post and set UI accordingly
            if (model.stars.containsKey(getUid())) {
                viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_24);
            } else {
                viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_outline_24);
            }

            if (!TextUtils.isEmpty(model.kzSongytblink))
                viewHolder.mImage.setImageResource(R.drawable.on_line_logo);
            else viewHolder.mImage.setImageResource(R.drawable.off_line_logo);

            // Bind Post to ViewHolder, setting OnClickListener for the star button
            viewHolder.bindToPost(model, new View.OnClickListener() {
                @Override
                public void onClick(View starView) {
                    // Need to write to both places the post is stored
                    DatabaseReference globalPostRef = mDatabase.child("songsDB").child(postRef.getKey());
                    // Run two transactions
                    onStarClicked(globalPostRef);
                }
            });

            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(mActivity, PostDetailActivity.class);
                    intent.putExtra(PostDetailActivity.EXTRA_POST_KEY, postRef.getKey());
                    startActivity(intent);
                }
            });
        }

        @Override
        public PostViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
            LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
            return new PostViewHolder(inflater.inflate(R.layout.item_post, viewGroup, false));
        }
    };
    return mAdapter;
}


public void ShowData(Query postsQuery) {

    mAdapter=getMAdapter(postsQuery);
    mRecycler.setAdapter(mAdapter);

}

public void SearchData(String searchText){
    //SearchData
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mRef = FirebaseDatabase.getInstance().getReference("songsDB");

    Query postsQuery= mRef.orderByChild("kzSongTitle").startAt(searchText).endAt(searchText + "\uf8ff");

    mAdapter=getMAdapter(postsQuery);
    mRecycler.setAdapter(mAdapter);
}
@Override
public void onStart() {
    super.onStart();
    if (mAdapter != null) {
        mAdapter.startListening();
    }
}

@Override
public void onStop() {
    super.onStop();
    if (mAdapter != null) {
        mAdapter.stopListening();
    }
}

private void onStarClicked(DatabaseReference postRef) {
    postRef.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            Post p = mutableData.getValue(Post.class);
            if (p == null) {
                return Transaction.success(mutableData);
            }

            if (p.stars.containsKey(getUid())) {
                // Unstar the post and remove self from stars
                p.starCount = p.starCount - 1;
                p.stars.remove(getUid());
            } else {
                // Star the post and add self to stars
                p.starCount = p.starCount + 1;
                p.stars.put(getUid(), true);
            }

            // Set value and report transaction success
            mutableData.setValue(p);
            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
            Log.d("postTransaction", "onComplete:" + dataSnapshot.getKey());
        }
    });
}

public String getUid() {
    return FirebaseAuth.getInstance().getCurrentUser().getUid();
}

public abstract Query getQuery(DatabaseReference databaseReference);
公共抽象类PostListFragment扩展了片段{
私有数据库参考数据库;
私人FirebaseRecyclerAdapter mAdapter;
私人垃圾回收站;
私人活动能力;
查询mRef;
搜索视图搜索视图;
直线布局经理/经理;
FirebaseDatabase mFirebaseDatabase;
公共PostListFragment(){
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
super.onCreateView(充气机、容器、保存状态);
视图根视图=充气机。充气(R.layout.fragment\u所有柱,容器,假);
mRecycler=rootView.findviewbyd(R.id.messages\u列表);
mRecycler.setHasFixedSize(true);
mDatabase=FirebaseDatabase.getInstance().getReference();
返回rootView;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
设置选项菜单(真);
//设置布局管理器,反向布局
mManager=newlinearlayoutmanager(getActivity());
mManager.setReverseLayout(true);
mManager.setStackFromEnd(true);
mRecycler.setLayoutManager(mManager);
Query postsQuery=getQuery(mDatabase);
ShowData(postsQuery);
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(右菜单。主菜单,菜单);
MenuItem=menu.findItem(R.id.action\u search);
searchView=(searchView)MenuItemCompat.getActionView(项);
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
搜索数据(查询);
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
//键入时进行筛选
搜索数据(新文本);
返回false;
}
});
super.onCreateOptions菜单(菜单,充气机);
}
私有FirebaseRecyclerAdapter getMAdapter(查询){
mActivity=getActivity();
最终对话框mDialog=新对话框(mActivity,R.style.NewDialog);
mDialog.addContentView(
新ProgressBar(mActivity),
新建LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_内容,LinearLayout.LayoutParams.WRAP_内容)
);
mDialog.setCancelable(真);
mDialog.show();
FirebaseRecyclerOptions选项=新建FirebaseRecyclerOptions.Builder()
.setQuery(查询,Post.class)
.build();
mAdapter=新FirebaseRecyclerAdapter(选项){
@凌驾
受保护的无效onBindViewHolder(PostViewHolder、int位置、最终Post模型){
最终数据库参考postRef=getRef(位置);
//确定当前用户是否喜欢此帖子,并相应地设置UI
if(model.stars.containsKey(getUid())){
viewHolder.rightView.setImageResource(R.drawable.ic_toggle_star_24);
}否则{
viewHolder.饥饿视图.setImageResource(R.drawable.ic\u开关\u星形\u轮廓\u 24);
}
如果(!TextUtils.isEmpty(model.kzsongytlink))
viewHolder.mImage.setImageResource(R.drawable.on_line_logo);
else viewHolder.mImage.setImageResource(R.drawable.off_line_logo);
//将Post绑定到ViewHolder,为星形按钮设置OnClickListener
viewHolder.bindToPost(model,newview.OnClickListener(){
@凌驾
公共void onClick(视图视图){
//需要写到帖子存储的两个位置
DatabaseReference globalPostRef=mDatabase.child(“songsDB”).child(postRef.getKey());
//运行两个事务
onStarClicked(globalPostRef);
}
});
viewHolder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(mActivity,PostDetailActivity.class);
intent.putExtra(PostDetailActivity.EXTRA_POST_KEY,postRef.getKey());
星触觉(意向);
}
});
}
@凌驾
public PostViewHolder onCreateViewHolder(ViewGroup ViewGroup,int viewType){
LayoutInflater充气器=LayoutInflater.from(viewGroup.getContext());
返回新的PostViewHolder(充气器。充气(R.layout.item_post,viewGroup,false));
}
};
返回mAdapter;
}
公共void ShowData(查询postsQuery){
mAdapter=getMAdapter(postsQuery);
mRecycler.setAdapter(mAdapter);
}
public void SearchData(字符串searchText){
//搜索数据
mFirebaseDatabase=FirebaseDatabase.getInstance();
mRef=FirebaseDatabase.getInstance().getReference(“songsDB”);
Query postsQuery=mRef.orderByChild(“kzsongtile”).startAt(searchText).endAt(searchText+“\uf8ff”);
mAdapter=getMAdapter(postsQuery);
mRecycler.setAdapter(mAdapter);
}
@凌驾
public void onStart(){
super.onStart();
如果(mAdapter!=null){
mAdapter.startListening();
}
}
@凌驾
公共void onStop(){
super.onStop();
如果(mAdapter!=null){
mAdapter.stopListening();
}
}
私有void onStarClicked(数据库引用postRef){
postRef.runTransaction(新事务处理程序(){
@凌驾
公共事务.Result doTransaction(MutableData MutableData){
Post p=mutableData.getValue(Post.class);
if(p==null){
返回事务。成功(可变数据);
}
if(p.stars.containsKey(getUid())){
//解开柱子,把自己从星星上移开
p、 星数=