2017-03-26 5 views
0
public List<Contact> getContacts() 
{ 
    SQLiteDatabase db; 
    String cmd; 
    List<Contact> name = new ArrayList<Contact>(); 
    db = myDb.getReadableDatabase(); 
    Cursor cursor = db.rawQuery("SELECT * FROM contact;" , null); 
    while(cursor.moveToNext()) 
    { 
     int contactID  = Integer.parseInt(cursor.getString(0)); 
     String familyName = cursor.getString(1); 
     String firstName = cursor.getString(2); 
     int houseNumber  = Integer.parseInt(cursor.getString(3)); 
     String street  = cursor.getString(4); 
     String town   = cursor.getString(5); 
     String country  = cursor.getString(6); 
     String postcode  = cursor.getString(7); 
     int telephoneNumber = Integer.parseInt(cursor.getString(8)); 
     Contact contact  = new Contact(contactID,familyName,firstName,houseNumber,street,town,country,postcode,telephoneNumber); 
    } 
    Intent intent = new Intent(Database.this,MainActivity.class); 
    intent.putStringArrayListExtra("contacts", name); 
    startActivity(intent); 

    return name; 
} 

Verfahren putStringArrayListExtra(String, ArrayList<String>) in der Art Intent ist nicht anwendbar für die Argumente (String, List<Contact>)Convert Liste <?><String> in Android zur Liste

um putStringArrayListExtra(); Methode zu verwenden, muss ich List<contact> Namen konvertieren Namen zur Liste, Wie konvertiere ich es? danke

+1

Die Sache ist, Sie brauchen alles in Ihrer 'ArrayList', um eine' String' zu sein, was in diesem Fall eindeutig nicht ist. Letztendlich hängt die Antwort auf Ihre Frage davon ab, wie die "Zeichenfolge" für jeden "Kontakt" aussehen soll. –

+0

Vielleicht besser, Serializable zu verwenden? Siehe http://stackoverflow.com/questions/2736389/how-to-pass-an-object-from-one-activity-to-another-on-android –

+0

@JoeC, ich meine, Sie können Ihre eigene Klasse Wrapping-Liste erstellen Serializable implementieren und verwenden. –

Antwort

0

da Liste Objekt tatsächlich nicht eine Liste von Strings ist, ist die beste Art und Weise, wie ich weiß, ist, über die Liste Schleife und jedes Element in eine neue Liste von Strings konvertieren:

List<String> stringsList = new ArrayList<>(list.size()); 
for (Object object : list) { 
    stringsList.add(Objects.toString(object, null)); 
} 
0

Scheint Sie versuchen, Ihre List<Contacts> zu über Intent passieren -

Keine Notwendigkeit putStringArrayListExtra() Methoden zu verwenden, wie es putParcelableArrayList() Methode ist mit dem Sie ArrayList<Contact> direkt passieren kann.

einfach verwenden,

putParcelableArrayList("KEY", your ArrayList<Contact>); // Make sure Contact implementes Parcelable 

Sie können die ArrayList<Contact> in Receiver Activity zu bekommen -

Bundle b = getIntent().getExtras(); 
ArrayList<Contact> data = b.getParcelableArrayList("KEY"); 

Sie können jedoch Serializable statt Parcelable verwenden, aber Parcelable wird empfohlen, da es wie Flash ist. Hier ist why?

+0

Serializable ist nicht auf Android empfohlen, deshalb bin ich sicher, dass Sie Parceble gemeint? – Remario

+0

Ja, benutze 'Parcelable'. Deshalb http://stackoverflow.com/questions/3323074/android-difference-between-parcelable-and-serializable – Wizard

+1

dann korrigieren Sie Ihre Antwort. es ist irreführend. – Remario

0

Zuerst deklarieren Sie ein neues Array von Strings.

List<String> newList = new ArrayList<String>(list.size()); 
newList.addAll(list); 

Dies fügt alle Elemente in die neue String-Liste ein. Wo ist der vorherige Container?

Um Objekte zwischen Komponenten zu übergeben, verwenden Sie Parceble, Android verwendet Binder, um eine solche Kommunikation in einer optimierten Weise zu ermöglichen. Die Sammelmappe kommuniziert mit Parzellen, einem Nachrichtencontainer. Die Binder marshaliert das zu sendende Paket, sendet und empfängt es und migriert es dann auf der anderen Seite, um eine Kopie des ursprünglichen Pakets zu rekonstruieren. Bitte lesen Sie es auf here.

Verwandte Themen