0

adapter.notifyDataSetChanged();と他のすべての解決策をオンラインで検索できましたが、firebaseのデータが自動的に読み込まれないため、データを読み込むために編集テキストボックスをクリックする必要があります。私がこれをどのように解決できるかについて、誰かが私を導くことができますか?ありがとう。Firebaseからのデータが自動的にAndroidスタジオをロードしない

私のアダプタですが、次のようになります。これは私が私のmainactivityでfirebase

public class FirebaseHelper { 
    DatabaseReference db; 
    Boolean saved=null; 
    ArrayList<Spacecraft> spacecrafts=new ArrayList<>(); 
    public FirebaseHelper(DatabaseReference db) { 
     this.db = db; 
    } 
    //WRITE IF NOT NULL 
    public Boolean save(Spacecraft spacecraft) 
    { 
     if(spacecraft==null) 
     { 
      saved=false; 
     }else 
     { 
      try 
      { 
       db.child("Spacecraft").push().setValue(spacecraft); 
       saved=true; 
      }catch (DatabaseException e) 
      { 
       e.printStackTrace(); 
       saved=false; 
      } 
     } 
     return saved; 
    } 
    //IMPLEMENT FETCH DATA AND FILL ARRAYLIST 
    private void fetchData(DataSnapshot dataSnapshot) 
    { 
     spacecrafts.clear(); 
     for (DataSnapshot ds : dataSnapshot.getChildren()) 
     { 
      Spacecraft spacecraft=ds.getValue(Spacecraft.class); 
      spacecrafts.add(spacecraft); 
     } 
    } 
    //READ THEN RETURN ARRAYLIST 
    public ArrayList<Spacecraft> retrieve() { 
     db.addChildEventListener(new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       fetchData(dataSnapshot); 
      } 
      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
       fetchData(dataSnapshot); 
      } 
      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 
      } 
      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
      } 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 
      } 
     }); 
     return spacecrafts; 
    } 
} 

からデータを読んでいるかである

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { 
    Context c; 
    ArrayList<Spacecraft> spacecrafts; 
    public MyAdapter(Context c, ArrayList<Spacecraft> spacecrafts) { 
     this.c = c; 
     this.spacecrafts = spacecrafts; 
    } 
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v=LayoutInflater.from(c).inflate(R.layout.model,parent,false); 
     return new MyViewHolder(v); 
    } 
    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     final Spacecraft s=spacecrafts.get(position); 
     holder.nameTxt.setText(s.getName()); 
     holder.propTxt.setText(s.getPropellant()); 
     holder.descTxt.setText(s.getDescription()); 
     holder.setItemClickListener(new ItemClickListener() { 
      @Override 
      public void onItemClick(int pos) { 
       //OPEN DETAI ACTIVITY 
       openDetailActivity(s.getName(),s.getDescription(),s.getPropellant()); 
      } 
     }); 
    } 
    @Override 
    public int getItemCount() { 
     return spacecrafts.size(); 
    } 
    //OPEN DETAIL ACTIVITY 
    private void openDetailActivity(String...details) 
    { 
     Intent i=new Intent(c,DetailActivity.class); 
     i.putExtra("NAME_KEY",details[0]); 
     i.putExtra("DESC_KEY",details[1]); 
     i.putExtra("PROP_KEY",details[2]); 
     c.startActivity(i); 
    } 
} 

私はこのような特殊なアダプタを設定しています:

db= FirebaseDatabase.getInstance().getReference(); 
FirebaseHelper = new FirebaseHelper(db); 
adapter = new MyAdapter(getActivity(), FirebaseHelper.retrieve()); 
adapter .notifyDataSetChanged(); 
recycler.setAdapter(adapter); 
adapter .notifyDataSetChanged(); 

私は配置しようとしましたadapter.notifyDataSetChanged();は多くの場所やクラスで運行されていません。これは本当に私を後押ししているので、どんな助けも素敵でしょうし、しばらく私を悩ませています。ありがとう、私はもっとコードを提供できるかどうか教えてください。

+0

recyclerViewにLayoutManagerがありますか? –

+0

注意を喚起するために**質問を再投稿しないでください**。この回答の以前のコピーを元に戻しました。 –

答えて

0

Firebaseでのデータの読み込みは非同期です。技術的には、データがまだ非同期的に発生しているため、まだ空の状態でspacecraftsを返しています。 FirebaseUI for Androidをご覧になることをお勧めします。これは、データをRecyclerViewと簡単に同期させるのに役立ちます。

関連する問題