0
Firebaseからデータを表示しようとしていますが、私のrecyclerViewに表示されません。私は何が間違っていたのか分からない。 私はまた、いくつかのチュートリアルやstackoverflowから同じ質問を見つけることを試みていますが、私はそれを取得しません。それでもFirebaseのデータは表示されません。FirebaseからのデータがCardViewでRecyclerViewに表示されない
HistoryActivity.class
public class HistoryActivity extends AppCompatActivity {
String name, route;
int earnings, time, distance, totalPassenger, tripCount;
private Firebase ref;
private RecyclerView recycler;
private RecyclerViewAdapter adapter;
List<History> historyList;
History history;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
Firebase.setAndroidContext(this);
recycler = (RecyclerView) findViewById(R.id.recyclerview);
historyList = fillData();
recycler.setLayoutManager(new LinearLayoutManager(this));
}
public List<History> fillData() {
historyList = new ArrayList<>();
ref = new Firebase(Config.FIREBASE_URL_HISTORY_DRIVER);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Toast.makeText(HistoryActivity.this, snapshot.getValue()+"", Toast.LENGTH_SHORT).show();
name = snapshot.child("driverName").getValue().toString().trim();
route = snapshot.child("destination").getValue().toString().trim();
earnings = Integer.valueOf(snapshot.child("earnings").getValue().toString().trim());
time = Integer.valueOf(snapshot.child("time").getValue().toString().trim());
distance = Integer.valueOf(snapshot.child("distanceTravelled").getValue().toString().trim());
totalPassenger = Integer.valueOf(snapshot.child("totalPassenger").getValue().toString().trim());
tripCount = Integer.valueOf(snapshot.child("tripCount").getValue().toString().trim());
historyList.add(new History(name, route, earnings, time, distance, totalPassenger, tripCount));
}
Toast.makeText(HistoryActivity.this, historyList.size()+":size", Toast.LENGTH_LONG).show();
adapter = new RecyclerViewAdapter(historyList);
recycler.setAdapter(adapter);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
return historyList;
}
}
RecyclerViewAdapter
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.HistoryViewHolder> {
List<History> historyList;
Context context;
public RecyclerViewAdapter(List<History> historyList) {
this.historyList = historyList;
}
@Override
public HistoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//inflate the layout, initialize the View Holder
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout, parent, false);
HistoryViewHolder holder = new HistoryViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(RecyclerViewAdapter.HistoryViewHolder holder, int position) {
holder.driversName.setText(historyList.get(position).getDriversName());
holder.route.setText(historyList.get(position).getRoute());
holder.totalEarnings.setText(historyList.get(position).getEarnings());
holder.time.setText(historyList.get(position).getTime());
holder.distance.setText(historyList.get(position).getDistance());
holder.totalPassenger.setText(historyList.get(position).getTotalPassenger());
holder.tripCount.setText(historyList.get(position).getTripCount());
animate(holder);
}
@Override
public int getItemCount() {
return historyList.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
public void animate(RecyclerView.ViewHolder viewHolder) {
final Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(context, R.anim.bounce_interpolator);
viewHolder.itemView.setAnimation(animAnticipateOvershoot);
}
public static class HistoryViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
EditText driversName;
EditText route;
EditText totalEarnings;
EditText time;
EditText distance;
EditText totalPassenger;
EditText tripCount;
public HistoryViewHolder(View itemView) {
super(itemView);
cardView = (CardView) itemView.findViewById(R.id.cardView);
driversName = (EditText) itemView.findViewById(R.id.edtDriversName);
route = (EditText) itemView.findViewById(R.id.edtRoute);
totalEarnings = (EditText) itemView.findViewById(R.id.edtEarning);
time = (EditText) itemView.findViewById(R.id.edtTime);
distance = (EditText) itemView.findViewById(R.id.edtDistance);
totalPassenger = (EditText) itemView.findViewById(R.id.edtTotalPass);
tripCount = (EditText) itemView.findViewById(R.id.edtTripCount);
}
}
}
履歴(POJO)あなたはこのようにアダプタを設定する前に、レイアウトを設定する必要が
public class History {
private String username;
private String driversName;
private String route;
private int earnings;
private int time;
private int distance;
private int totalPassenger;
private int tripCount;
public History(String driversName, String route, int earnings, int time, int distance, int totalPassenger, int tripCount) {
this.driversName = driversName;
this.route = route;
this.earnings = earnings;
this.time = time;
this.distance = distance;
this.totalPassenger = totalPassenger;
this.tripCount = tripCount;
}
StackOverflowは、アプリをデバッグするのに非常に非効率的な方法です。デバッガを使用してコードが実行され、何が*実行され、何が*トリガされないかを確認する必要があります。そうすれば、あなたが期待していないことをしているコード内の場所を見つけることができます。簡単な最初の質問:あなたの 'onDataChange()'メソッドはトリガされますか? –
また、あなたは 'onCancelled'で起こり得るエラーを飲み込んでいます。このページの[Androidでデータを読み込む際のエラーを検出する]方法については、こちらを参照してください(http://stackoverflow.com/documentation/firebase/5548/how-do-i-listen-for-errors-when-accessing-the-database# t = 201609192212047137718)。 –
なぜFirebaseRecyclerAdapterを使用しないのですか? –