0

В настоящее время я реализовал RecyclerView, но мой CarView не показывает данные.Показать данные из Firebase в RecyclerView на Android

Это мои текущие данные в Firebase:

Three records in Firebase

Но RecyclerView показывает все три CardViews, но без записей:

Screenshot of CardView without logs

Эти файлы я в используя: DomicilarSearchFragment.java

import android.os.Bundle; 
import android.os.AsyncTask; 
import android.support.v4.app.Fragment; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import com.didierzuniga.domix.R; 
import com.didierzuniga.domix.adapter.OrderAdapterRecyclerView; 
import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 
import java.util.HashMap; 

import butterknife.Bind; 
import butterknife.ButterKnife; 

/** 
* A simple {@link Fragment} subclass. 
*/ 
public class DomiciliarySearchFragment extends Fragment { 

    @Bind(R.id.recycler_order) RecyclerView recyclerView; 

    public DomiciliarySearchFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     super.onCreate(savedInstanceState); 
     View view = inflater.inflate(R.layout.fragment_domiciliary_search, container, false); 
     showToolbar(getResources().getString(R.string.tab_search), true, view); 
     ButterKnife.bind(this, view); 
     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
     new GetDataFromFirebase().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

     // Read from the database 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference myRef = database.getReference("order"); 

     myRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       HashMap<String, String> values = (HashMap<String, String>) dataSnapshot.getValue(); 
       recyclerView.setAdapter(new OrderAdapterRecyclerView(values)); 
      } 

      @Override 
      public void onCancelled(DatabaseError error) { 
       // Failed to read value 
       System.out.println("Failed to read value." + error.toException()); 
      } 
     }); 

     return view; 
    } 

    private class GetDataFromFirebase extends AsyncTask<Void,Void,Boolean>{ 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected Boolean doInBackground(Void... voids) { 
      return false; 
     } 

     @Override 
     protected void onPostExecute(Boolean aBoolean) { 
      super.onPostExecute(aBoolean); 
     } 
    } 

    public void showToolbar(String tittle, boolean upButton, View view){ 
     Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); 
     ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); 
     ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(tittle); 
     ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(upButton); 
    } 
} 

OrderAdapterRecyclerView.java

import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import com.didierzuniga.domix.R; 
import java.util.HashMap; 
import java.util.Map; 

public class OrderAdapterRecyclerView extends RecyclerView.Adapter<OrderAdapterRecyclerView.ViewHolder>{ 
    private HashMap<String, String> values; 
    public OrderAdapterRecyclerView(HashMap<String, String> values) { 
     this.values = values; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_order,parent,false)); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.fromm.setText(values.get(position)); 
     holder.too.setText(values.get(position)); 
     holder.moneyToPayy.setText(values.get(position)); 
    } 

    @Override 
    public int getItemCount() { 
     return values.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     private TextView fromm; 
     private TextView too; 
     private TextView moneyToPayy; 
     ViewHolder(View itemView) { 
      super(itemView); 
      fromm = (TextView) itemView.findViewById(R.id.from); 
      too = (TextView) itemView.findViewById(R.id.to); 
      moneyToPayy = (TextView) itemView.findViewById(R.id.moneyToPay); 
     } 
    } 
} 

Модель: Order.java

public class Order { 
    public String uid; 
    public String oFrom; 
    public String oTo; 
    public String oHeader; 
    public String oDescription; 
    public String oMoneyToPay; 
    public String oAuthor; 
    public boolean completed; 

public Order(){ 

    } 

public Order(String oFrom, String oTo, String oHeader, String oDescription, String oMoneyToPay, String oAuthor) { 
    this.oFrom = oFrom; 
    this.oTo = oTo; 
    this.oHeader = oHeader; 
    this.oDescription = oDescription; 
    this.oMoneyToPay = oMoneyToPay; 
    this.oAuthor = oAuthor; 
    this.completed = false; 
} 

public String getUid() { 
    return uid; 
} 

public void setUid(String uid) { 
    this.uid = uid; 
} 

public String getoFrom() { 
    return oFrom; 
} 

public void setoFrom(String oFrom) { 
    this.oFrom = oFrom; 
} 

public String getoTo() { 
    return oTo; 
} 

public void setoTo(String oTo) { 
    this.oTo = oTo; 
} 

public String getoHeader() { 
    return oHeader; 
} 

public void setoHeader(String oHeader) { 
    this.oHeader = oHeader; 
} 

public String getoDescription() { 
    return oDescription; 
} 

public void setoDescription(String oDescription) { 
    this.oDescription = oDescription; 
} 

public String getoMoneyToPay() { 
    return oMoneyToPay; 
} 

public void setoMoneyToPay(String oMoneyToPay) { 
    this.oMoneyToPay = oMoneyToPay; 
} 

public String getoAuthor() { 
    return oAuthor; 
} 

public void setoAuthor(String oAuthor) { 
    this.oAuthor = oAuthor; 
} 

public boolean isCompleted() { 
    return completed; 
} 

public void setCompleted(boolean completed) { 
    this.completed = completed; 
} 
} 

¿Что мне нужно сделать, чтобы быть в состоянии отображать регистры в каждом CardView?

Спасибо!

+0

вы должны сначала получить dataSnapshot.getChildren(), а затем получить все записи по одному в цикле. Тогда каждый ребенок под детьми будет пунктом заказа. ChildEventListener более подходит для этого случая. Другая проблема - не создавать новый адаптер каждый раз, когда изменяются значения данных. вместо этого установите значения адаптера и используйте notifydatasetchanged. – uguboz

+0

. Вы можете использовать FirebaseRecyclerAdapter, чтобы упростить работу https://github.com/firebase/FirebaseUI-Android/tree/master/database – Linxy

ответ

0

В DomicilarSearchFragment.java/onDataChange, Можете ли вы подтвердить, что hashmap был правильно заполнен?

У меня была аналогичная проблема, но причина в том, что данные не были правильно хранится в коллекции

0

Благодаря uguboz, я должен иметь использование dataSnapshot.getChildren(), и получить все записи по одному в петля

 rv = (RecyclerView) view.findViewById(R.id.recycler_order); 
     rv.setLayoutManager(new LinearLayoutManager(getContext())); 
     orders = new ArrayList<>(); 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     adapter = new OrderAdapter(orders); 
     rv.setAdapter(adapter); 

     database.getReference().child("order").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       orders.removeAll(orders); 
       for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
        Order order = snapshot.getValue(Order.class); 
        orders.add(order); 
       } 
       adapter.notifyDataSetChanged(); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

Спасибо всем.