0

Ich habe derzeit RecyclerView implementiert, aber mein CarView zeigt die Daten nicht.Zeige Daten von Firebase in RecyclerView auf Android

Dies sind meine aktuellen Daten in Firebase:

Three records in Firebase

Aber die RecyclerView zeigt alle drei CardViews, aber ohne die Datensätze:

Screenshot of CardView without logs

Dies sind die Dateien, die ich bin mit: DomiciliarySearchFragment.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); 
     } 
    } 
} 

Modell: 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; 
} 
} 

¿Was ich die Register in jedem CardView angezeigt werden können, tun müssen?

Vielen Dank!

+0

sollten Sie zuerst dataSnapshot.getChildren() und dann alle Datensätze nacheinander in einer Schleife abrufen. Jedes Kind unter Kindern wird dann Bestellartikel sein. ChildEventListener ist für diesen Fall besser geeignet. Ein weiteres Problem ist, dass Sie nicht jedes Mal einen neuen Adapter erstellen, wenn sich die Datenwerte ändern. Setzen Sie stattdessen Adapterwerte und verwenden Sie notifydatasetchanged – uguboz

+0

Sie könnten einen FirebaseRecyclerAdapter verwenden, um die Dinge zu vereinfachen https://github.com/firebase/FirebaseUI-Android/tree/master/database – Linxy

Antwort

0

In DomiciliarySearchFragment.java/onDataChange, Können Sie bestätigen, dass hashmap korrekt ausgefüllt wurde?

Ich hatte ein ähnliches Problem, aber der Grund war, dass die Daten nicht korrekt in der Sammlung

0

Dank uguboz, gespeichert wurde greife ich am dataSnapshot.getChildren haben(), und nutzen Sie die alle eine Aufzeichnungen von einem in eine Schleife

 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) { 

      } 
     }); 

Vielen Dank an alle.

Verwandte Themen