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;
}
Intent类型中的方法putStringArrayListExtra(String, ArrayList<String>)
不适用于参数(String, List<Contact>)
为了使用putStringArrayListExtra();
方法,我需要将List<contact>
名称转换为列表名称,如何转换它?
谢谢
答案 0 :(得分:0)
因为对象列表实际上不是字符串列表,我知道的最好方法是循环遍历列表并将每个项目转换为新的字符串列表:
List<String> stringsList = new ArrayList<>(list.size());
for (Object object : list) {
stringsList.add(Objects.toString(object, null));
}
答案 1 :(得分:0)
好像你试图将List<Contacts>
传递给Intent
-
无需使用putStringArrayListExtra()
方法,因为putParcelableArrayList()
方法可以直接传递ArrayList<Contact>
。
只需使用,
putParcelableArrayList("KEY", your ArrayList<Contact>); // Make sure Contact implementes Parcelable
您可以在Receiver ArrayList<Contact>
-
Activity
Bundle b = getIntent().getExtras();
ArrayList<Contact> data = b.getParcelableArrayList("KEY");
但是,您可以使用Serializable
代替Parcelable
,但建议使用Parcelable
,因为它就像Flash一样。这是why?
答案 2 :(得分:0)
首先声明一个新的字符串数组。
List<String> newList = new ArrayList<String>(list.size());
newList.addAll(list);
这会将所有元素添加到新的String List中。列表是您以前的容器。
为了在组件之间传递对象使用Parceble,Android使用Binder以高度优化的方式促进这种通信。 Binder与Parcels通信,Parcel是一个消息容器。 Binder将包裹发送,发送和接收,然后在另一侧解组以重建原始包裹的副本。请阅读它here。