2017-02-24 3 views
0

私はFirebaseRecyclerAdapterを使用しています。アクティビティを開くとダイアログの進捗状況を表示したいと思います。データがロードされると消えてしまいます。リストが空の場合、メッセージが表示されます。私は彼らがaddListenerForSingleValueEventを使って解答を与えた他の質問を見た。これは私のためには機能しません。私のコードで何が間違っていますか?手伝って頂けますか?ありがとうございました!addListenerForSingleValueEventがFirebaseRecyclerAdapterの後に動作しない

progressDialog = ProgressDialog.show(RecordActivity.this, null, "Loading Data", true); 
mDatabaseI = FirebaseDatabase.getInstance().getReference().child("user-record").child(getUid()); 

mAdapter = new FirebaseRecyclerAdapter<RecordItem, RecordViewHolder>(RecordItem.class, R.layout.record_item, RecordViewHolder.class, mDatabaseI) { 
    @Override 
    protected void populateViewHolder(final RecordViewHolder viewHolder, final RecordItem model, final int position) { 
     final DatabaseReference postRef = getRef(position); 

     // Set click listener for the whole post view 
     final String postKey = postRef.getKey(); 

     viewHolder.bindToPost(model); 
    } 
}; 

mRecycler.setAdapter(mAdapter); 
mDatabaseI.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     //onDataChange called so remove progress bar 

     //make a call to dataSnapshot.hasChildren() and based 
     //on returned value show/hide empty view 

     //use helper method to add an Observer to RecyclerView 
     progressDialog.dismiss(); 
     boolean a = dataSnapshot.hasChildren(); 

     if (Boolean.TRUE.equals(a)){ 
      Toast.makeText(getApplicationContext(), "it is empity, Add a item", Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
    } 
}); 
+0

ifを入力していないため? –

+0

firebaseデータベースからアイテムを読み込みます。それは働く – hulon

答えて

2

まずショーの進行、

progressDialog = ProgressDialog.show(RecordActivity.this, null, "Loading Data", true); 
mDatabaseI = FirebaseDatabase.getInstance().getReference().child("user-record").child(getUid()); 

第二には、 .addListenerForSingleValueEventを設定し、nullチェックを行います。そのパスを持つノードの下にデータがない場合、 dataSnapshotは空を返します。

mDatabaseI.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.getValue() == null){ 
      progressDialog.dismiss(); 
      Toast.makeText(getApplicationContext(), "It is empty, Add an item", Toast.LENGTH_LONG).show(); 
     } 

    } 

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

最後にアダプターを設定して、表示されているかどうかを確認してから、進捗状況を消してください。値があるとき、それはあなたが活動を開いたときに何が起こるaddListenerForSingleValueEvent

mAdapter = new FirebaseRecyclerAdapter<RecordItem, RecordViewHolder>(RecordItem.class, R.layout.record_item, RecordViewHolder.class, mDatabaseI) { 
    @Override 
    protected void populateViewHolder(final RecordViewHolder viewHolder, final RecordItem model, final int position) { 
     if (progressDialog.isShowing()){ 
      progressDialog.dismiss(); 
     } 
     final DatabaseReference postRef = getRef(position); 

     // Set click listener for the whole post view 
     final String postKey = postRef.getKey(); 

     viewHolder.bindToPost(model); 
    } 
}; 

mRecycler.setAdapter(mAdapter); 
関連する問題