Vous avez essayé de charger toutes les données d'une base de données Firebase dans quatre textviews différents avec un adaptateur personnalisé. Le faire fonctionner avec un textview était plutôt simple. Il a été beaucoup plus difficile de le faire fonctionner avec un adaptateur personnalisé. Le code s'exécute, mais rien n'apparaît dans l'interface et ne peut pas comprendre pourquoi, car il ne génère aucune erreur non plus. Des idées sur la raison pour laquelle cela ne génère pas d'erreurs ou n'affiche pas les données?Récupérer des données de la base de données Firebase dans plusieurs textviews avec un adaptateur personnalisé ne montrant aucune erreur/ne rien afficher?
Fiche Modèle:
public class Record {
public String clicked;
public String date;
public String diff;
public String sync;
public String uid;
public Record(){
}
public String getClicked() {
return clicked;
}
public String getDate() {
return date;
}
public String getDiff() {
return diff;
}
public String getSync() {
return sync;
}
public String getUid() {
return uid;
}
public void setClicked(String clicked){
this.clicked = clicked;
}
public void setDate(String date){
this.date = date;
}
public void setDiff(String diff){
this.diff = diff;
}
public void setSync(String time){
this.sync = sync;
}
public void setUid(String uid){
this.uid = uid;
}
public Record(String sync, String clicked, String diff, String date, String uid) {
this.clicked = clicked;
this.date = date;
this.diff = diff;
this.sync = sync;
this.uid = uid;
}
CustomAdapter:
public class CustomAdapter extends BaseAdapter{
Context c;
ArrayList<Record> records;
public CustomAdapter(Context c, ArrayList<Record> records) {
this.c = c;
this.records = records;
}
@Override
public int getCount() {
return records.size();
}
@Override
public Object getItem(int position) {
return records.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null)
{
convertView= LayoutInflater.from(c).inflate(R.layout.list_adapter_view,parent,false);
}
TextView timeTxt= (TextView) convertView.findViewById(R.id.texttime);
TextView clickedTxt= (TextView) convertView.findViewById(R.id.textclick);
TextView diffTxt= (TextView) convertView.findViewById(R.id.textdiff);
TextView dateTxt= (TextView) convertView.findViewById(R.id.textdate);
final Record s= (Record) this.getItem(position);
timeTxt.setText(s.getSync());
clickedTxt.setText(s.getClicked());
diffTxt.setText(s.getDiff());
dateTxt.setText(s.getDate());
return convertView;
}
}
Activité:
public class UserProfileActivity extends AppCompatActivity {
private FirebaseAuth mFirebaseAuth;
private FirebaseUser mFirebaseUser;
private String mUserId;
CustomAdapter adapter;
DatabaseReference db;
ListView lv;
ArrayList<Record> records = new ArrayList<>();
static final ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile2);
getSupportActionBar().setDisplayUseLogoEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.mipmap.ic_launcher);
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
loadLogInView();
} else {
mUserId = mFirebaseUser.getUid();
lv = (ListView) findViewById(R.id.listView);
db = FirebaseDatabase.getInstance().getReference().child("users").child(mUserId).child("records");
adapter = new CustomAdapter(this, retrieve());
lv.setAdapter(adapter);
}
}
public ArrayList<Record> 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 records;
}
private void fetchData(DataSnapshot dataSnapshot)
{
for (DataSnapshot ds : dataSnapshot.getChildren()){
records.clear();
Record record= dataSnapshot.getValue(Record.class);
records.add(record);
}
}
activity_user_profile2.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="5sp">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listView" />
</LinearLayout>
</RelativeLayout>
list_adapter_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingTop="5sp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true">
<TextView
android:textStyle="bold"
android:paddingTop="20sp"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/texttime"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>
<TextView
android:textStyle="bold"
android:paddingTop="20sp"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/textclick"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>
<TextView
android:textStyle="bold"
android:paddingTop="20sp"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/textdiff"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>
<TextView
android:textStyle="bold"
android:paddingTop="20sp"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/textdate"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>
</LinearLayout>
Il n'y a aucun ViewHolder dans votre classe Adapter. Ajoutez un ViewHolder dans votre adaptateur. –