无法为textview设置Android Listview

时间:2016-12-21 11:20:21

标签: android listview

我正在尝试使用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;
}

}

2 个答案:

答案 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 

我不确定如果您检索到正确值,它是否会得到正确的值...