【问题标题】:getting contact from phonebook in android从android中的电话簿中获取联系人
【发布时间】:2017-01-05 08:36:46
【问题描述】:

我有两个数组列表 NumINdb(VARIABLES) 和 common(VARIABLES)...我比较了两个 Arraylist 并从新 Arraylist Finalarr(VARIABLE) 中的 Arraylist 中检索了公共元素...

我正在将 Arraylist 传递给函数 getPlayers(Finalarr) .....下面是函数...

我在 FinalArr Arraylist 中有电话号码,并希望他们的姓名来自电话的通讯录/电话簿......我想将值存储在 Arraylist 中......

 private ArrayList < DATA_CONTACT > getPlayers(ArrayList < String > filterVALUES) {
    ArrayList < DATA_CONTACT > players = new ArrayList < DATA_CONTACT > ();

    ContentResolver cr = getContext().getContentResolver();

    Cursor phoneCursor;
    for (int o = 0; o < filterVALUES.size(); o++) {

        phoneCursor = cr.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?", new String[] {
                filterVALUES.get(o).toString()
            }, null);

        DATA_CONTACT p = null;
        while (phoneCursor.moveToNext()) {

            p = new DATA_CONTACT();
            final String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            String contact_display_name = phoneCursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            // filtered.add(phoneNumber.toString());

            p.setName(contact_display_name);
            p.setPhone(phoneNumber.toString());
            p.setImg(R.drawable.com_facebook_button_like_background);
        }
        phoneCursor.close();
        players.add(p);

    }
    return players; //Returns a List of Contact Matching the Arraylist..
}

错误...

FATAL EXCEPTION: main
                                               Process: com.example.cosmic.zumi_test, PID: 534
                                               java.lang.NullPointerException: Attempt to invoke interface method 'int android.database.Cursor.getColumnIndex(java.lang.String)' on a null object reference
                                                   at com.example.cosmic.zumi_test.Contact_FRAGMENT3.getPlayers(Contact_FRAGMENT3.java:243)
                                                   at com.example.cosmic.zumi_test.Contact_FRAGMENT3.access$100(Contact_FRAGMENT3.java:57)
                                                   at com.example.cosmic.zumi_test.Contact_FRAGMENT3$1.onDataChange(Contact_FRAGMENT3.java:157)
                                                   at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)
                                                   at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
                                                   at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
                                                   at android.os.Handler.handleCallback(Handler.java:815)
                                                   at android.os.Handler.dispatchMessage(Handler.java:104)
                                                   at android.os.Looper.loop(Looper.java:194)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5643)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at java.lang.reflect.Method.invoke(Method.java:372)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

【问题讨论】:

  • 我不明白你想从我们这里得到什么?我们为您编写代码?含义:请不要只谈论你做什么;但请解释是什么阻止你到达那里。此外:您希望我们花时间帮助您;所以请您花 1 分钟时间来正确格式化/缩进您的源代码。长话短说:在这里花了一些时间help center 并阅读这里问什么/如何问。
  • @ghostCAT 我已经输入了我的错误消息..我正在获取..请帮助...
  • 这更有意义(仍然:为什么堆栈跟踪的惰性格式)......无论如何:从这里开始阅读:stackoverflow.com/questions/218384/…
  • 我需要帮助我的查询已通过...请检查...变量 contact_display_name 给出空错误...
  • 我完全幻想小写这整个问题...

标签: java android arraylist


【解决方案1】:

这里的异常点(很可能?):

cursor.getColumnIndex(...

并告诉您 cursornull

您的意思是 phoneCursor 吗?

【讨论】:

    【解决方案2】:

    如果您只想从数组列表中获取名称(我假设您的数组列表包含数字),那么下面是根据联系人号码返回名称的方法。

    public static String getContactName(Context context, String phoneNumber) {
        ContentResolver cr = context.getContentResolver();
        Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
        Cursor cursor = cr.query(uri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);
        if (cursor == null) {
            return null;
        }
        String contactName = null;
        if(cursor.moveToFirst()) {
            contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
        }
    
        if(cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
        return contactName;
    }
    

    不要忘记在清单中添加“读取联系人”权限

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 2015-07-20
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2016-05-30
      相关资源
      最近更新 更多