2017-01-17 2 views
-3

I Bild angezeigt werden soll + tel number.I für Kontakt eine Klasse erstellen haben:getView nicht zurück Daten

public class Contact { 

    private int CTC_ID; 
    private byte[] CTC_IMAGE; 
    public String CTC_NOM; 
    public String CTC_NUMERO; 

    public Contact(){ 
    } 

    public Contact(byte[] CTC_IMAGE, String CTC_NOM, String CTC_NUMERO){ 
     this.CTC_IMAGE = CTC_IMAGE; 
     this.CTC_NOM = CTC_NOM; 
     this.CTC_NUMERO = CTC_NUMERO; 
    } 
    public Contact(String CTC_NOM, String CTC_NUMERO){ 
     this.CTC_NOM = CTC_NOM; 
     this.CTC_NUMERO = CTC_NUMERO; 
    } 



    public int getCTC_ID(){ 
     return CTC_ID; 
    } 
    public byte[] getCTC_IMAGE(){return CTC_IMAGE; } 
    public String getCTC_NOM() { 
     return CTC_NOM; 
    } 
    public String getCTC_NUMERO() { 
     return CTC_NUMERO; 
    } 

    public void setCTC_ID(int CTC_ID) { 
     this.CTC_ID = CTC_ID; 
    } 
    public void setCTC_IMAGE(byte[] CTC_IMAGE) { this.CTC_IMAGE = CTC_IMAGE;} 
    public void setCTC_NOM(String CTC_NOM) { this.CTC_NOM = CTC_NOM;} 
    public void setCTC_NUMERO(String CTC_NUMERO) { 
     this.CTC_NUMERO = CTC_NUMERO; 
    } 


    public String toString(){ 
     return "ID : "+CTC_ID+"\nimage : "+CTC_IMAGE+"\nnom : "+CTC_NOM+"\nnumero : "+CTC_NUMERO; 
    } 
} 

Für Add Kontakt in die Liste I mein databaseHelper in Methode fetchAllContactDetail haben:

public ArrayList<Contact> fetchAllContactDetail() { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ArrayList<Contact> contactListe = new ArrayList<>(); 

    Cursor mCursor = db.query(TABLE_CONTACT, new String[]{"CTC_ID _id", KEY_CTC_IMAGE, KEY_CTC_IMAGE, KEY_CTC_NOM, KEY_CTC_NUMERO}, null, null, null, null, null); 

    if (mCursor.moveToFirst()) { 
     do { 
      byte[] image = mCursor.getBlob(mCursor.getColumnIndex(KEY_CTC_IMAGE)); 
      String name = mCursor.getString(mCursor.getColumnIndex(KEY_CTC_NOM)); 
      String numero = mCursor.getString(mCursor.getColumnIndex(KEY_CTC_NUMERO)); 
      contactListe.add(new Contact(image, name, numero)); 
     } while (mCursor.moveToNext()); 
    } 
    return contactListe; 
} 
ContactAdapter erstreckt BaseAdapter

habe ich erstellen:

public class ContactAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<Contact> contactList = new ArrayList<Contact>(); 


    // Constructor 
    public ContactAdapter(Context context, ArrayList<Contact> contactList) { 
     this.context = context; 
     this.contactList.addAll(contactList); 
    } 
    @Override 
    public int getCount() { 
     return contactList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return contactList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    private class ViewHolder{ 
     ImageView img; 
     TextView name; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup viewGroup) { 
     View row = view; 
     ViewHolder holder = new ViewHolder(); 

     if(row == null){ 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.contact_item, null); 
     } 

     Contact contact = contactList.get(position); 

     if (contactList != null) { 
      holder.name = (TextView) row.findViewById(R.id.name); 
      holder.img = (ImageView) row.findViewById(R.id.img); 

      holder.name.setText(contact.getCTC_NUMERO()); 
      byte[] contactImage = contact.getCTC_IMAGE(); 
      Bitmap bitmap = BitmapFactory.decodeByteArray(contactImage, 0, contactImage.length); 
      holder.img.setImageBitmap(bitmap); 
      row.setTag(holder); 
     } 
     return row; 

    } 
} 

Und kehre ich dies in m y mainActivity:

public class MainActivity extends AppCompatActivity { 
    private ListView lstViewContact; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       lstViewContact = (ListView) findViewById(R.id.lvContact); 

       displayContact(); 

} 

    public void displayContact() { 

     //On ouvre la base de données pour écrire dedans 
     DatabaseHelper dbHelper = new DatabaseHelper(this); 
     final ContactAdapter contactAdapter = new ContactAdapter(this, dbHelper.fetchAllContactDetail()); 
     lstViewContact.setAdapter(contactAdapter); 
    } 
} 

Meine Datenbank haben 2 Kontakt und es ist Rückkehr von contactListe

enter image description here

In meinem ContactAdapter die

@Override 
public int getCount() { 
    return contactList.size(); 
} 

Return 2, es ist ok.

Ich sage nicht, wo das Problem ist.

Vielen Dank für Ihre Hilfe.

Antwort

0

ersetzen

ViewHolder holder = new ViewHolder(); 

if(row == null) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    row = inflater.inflate(R.layout.contact_item, null); 
} 

mit

ViewHolder holder; 

if(row == null) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    row = inflater.inflate(R.layout.contact_item, viewGroup, false); 

    holder = new ViewHolder(); 
    // TODO: Initialise holder values, like 
    // holder.name = row.findViewById(R.id.name); 
    row.setTag(holder); 
} else { 
    holder = (ViewHolder) row.getTag(); 
} 
+0

Ich versuche, dies aber nicht mein Problem x) nicht –

+0

wieder das gleiche Problem geändert: ‚( –

+0

Ist es abstürzt oder Daten sind leer –

0

Ihr Problem in Ihrer getView() -Implementierung

@Override 
public View getView(int position, View view, ViewGroup viewGroup) { 
    View row = view; 
    ViewHolder holder = null; 

    if(row == null){ 
     holder=new ViewHolder(); 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.contact_item, null); 
     holder.name = (TextView) row.findViewById(R.id.name); 
     holder.img = (ImageView) row.findViewById(R.id.img); 
     row.setTag(holder); 
    }else{ 
    holder=row.getTag();} 

    Contact contact = contactList.get(position); 

    if (contactList != null) { 

     holder.name.setText(contact.getCTC_NUMERO()); 
     byte[] contactImage = contact.getCTC_IMAGE(); 
     Bitmap bitmap = BitmapFactory.decodeByteArray(contactImage, 0, contactImage.length); 
     holder.img.setImageBitmap(bitmap); 

    } 
    return row; 

} 

Hier geht es um den Halter intitialization Problem.

fügen Sie den obigen Code ein und versuchen Sie es.

+0

wieder das gleiche Problem:‘ ( –

+0

Und das Problem ist? – Godwin

+0

1. Können Sie das Ergebnis in eine ArrayList kopieren und versuchen. 2. Wenn es nicht funktioniert mit Dummy-Daten überprüfen. 3. Wenn es funktioniert, ist das Problem nicht in Adapter. Und ändern Sie den Parameter von Connstructor übergeben zu setzen Methode und Aufruf notifydataset geändert. – Godwin

Verwandte Themen