2017-05-27 1 views
1

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?

Voici la structure: enter image description here

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> 
+0

Il n'y a aucun ViewHolder dans votre classe Adapter. Ajoutez un ViewHolder dans votre adaptateur. –

Répondre

1

Le problème était quelques lignes dans la classe d'activité n'étaient pas au bon endroit. Voici la solution de travail.

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"); 


      retrieve(); 




     } 

    } 


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




      Record record= dataSnapshot.getValue(Record.class); 

      records.add(record); 



     adapter = new CustomAdapter(this,records); 
     lv.setAdapter(adapter); 
    } 



    private void loadLogInView() { 
     Intent intent = new Intent(this, LoginActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     startActivity(intent); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 

     if (id == R.id.action_logout) { 
      mFirebaseAuth.signOut(); 
      loadLogInView(); 
     } 

     return super.onOptionsItemSelected(item); 
    } 

}