我正在尝试使用ListView适配器为此文本视图设置ListView
,但会生成错误:
(25, 29) error: no suitable constructor found for
ArrayAdapter(MainActivity,int,int,String)
constructor ArrayAdapter.ArrayAdapter(
Context,int,int,String[]) is not applicable
(argument mismatch; String cannot be converted to String[])
constructor ArrayAdapter.ArrayAdapter(Context,int,int,
List<String>) is not applicable
(argument mismatch; String cannot be converted to List<String>)
MainActivity:
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView output = (TextView) findViewById(R.id.output);
// Fetch emails from contact list
String emailStr = refreshData();
// Show emails on screen
output.setText(emailStr);
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_main,R.id.output,emailStr));
}
private String refreshData() {
String emaildata = "";
try {
/**************************************************/
ContentResolver cr = getBaseContext()
.getContentResolver();
Cursor cur = cr
.query(ContactsContract.Contacts.CONTENT_URI,
null,
null,
null,
null);
if (cur.getCount() > 0) {
Log.i("Content provider", "Reading contact emails");
while (cur
.moveToNext()) {
String contactId = cur
.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
// Create query to use CommonDataKinds classes to fetch emails
Cursor emails = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = " + contactId, null, null);
/*
//You can use all columns defined for ContactsContract.Data
// Query to get phone numbers by directly call data table column
Cursor c = getContentResolver().query(Data.CONTENT_URI,
new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
Data.CONTACT_ID + "=?" + " AND "
+ Data.MIMETYPE + "= + Phone.CONTENT_ITEM_TYPE + ",
new String[] {String.valueOf(contactId)}, null);
*/
while (emails.moveToNext()) {
// This would allow you get several email addresses
String emailAddress = emails
.getString(emails
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
//Log.e("email==>", emailAddress);
emaildata +=" "+emailAddress+" ";
}
emails.close();
}
}
else
{
emaildata +=" Data not found. ";
}
cur.close();
} catch (Exception e) {
emaildata +=" Exception : "+e+" ";
}
return emaildata;
}
}
答案 0 :(得分:0)
ListView
adapter take Array not string object:
output.setText(emailStr);
emailStr
是字符串这里它应该是Array.check语法
this.setListAdapter(new ArrayAdapter<String>(this,
R.layout.activity_main,R.id.output,arr[]));
答案 1 :(得分:0)
ArrayList<String> list = new ArrayList<>();
list = refreshData();
并确保您的函数返回ArrayList
private ArrayList<String> refreshData() {
String emaildata = "";
ArrayList<String> list = new ArrayList<String>();
try {
/**************************************************/
ContentResolver cr = getBaseContext()
.getContentResolver();
Cursor cur = cr
.query(ContactsContract.Contacts.CONTENT_URI,
null,
null,
null,
null);
if (cur.getCount() > 0) {
Log.i("Content provider", "Reading contact emails");
while (cur
.moveToNext()) {
String contactId = cur
.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
// Create query to use CommonDataKinds classes to fetch emails
Cursor emails = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = " + contactId, null, null);
/*
//You can use all columns defined for ContactsContract.Data
// Query to get phone numbers by directly call data table column
Cursor c = getContentResolver().query(Data.CONTENT_URI,
new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
Data.CONTACT_ID + "=?" + " AND "
+ Data.MIMETYPE + "= + Phone.CONTENT_ITEM_TYPE + ",
new String[] {String.valueOf(contactId)}, null);
*/
while (emails.moveToNext()) {
String emailAddress = emails
.getString(emails .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
emaildata +=" "+emailAddress+" ";
list.add(emaildata);
}
emails.close();
}
}
cur.close();
} catch (Exception e) {
}
return list;
}
最后将其设置为适配器
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_main,R.id.output,list));
您可以通过
检查尺寸,以了解该联系人是否有电子邮件 int count = list.size();
if (count > 0) it has values else not
我不确定如果您检索到正确值,它是否会得到正确的值...