Почему в моем запросе контактов указан контакт с другим идентификатором?

Попытка объяснить это более описательно,

Операция 1:

x = [[0, 0], [0, 0]]
print(type(x)) # <class 'list'>
print(x) # [[0, 0], [0, 0]]

x[0][0] = 1
print(x) # [[1, 0], [0, 0]]

Операция 2:

y = [[0] * 2] * 2
print(type(y)) # <class 'list'>
print(y) # [[0, 0], [0, 0]]

y[0][0] = 1
print(y) # [[1, 0], [1, 0]]

Заметил, почему не изменяется первый элемент первого списка не изменил второй элемент каждого списка? Это потому, что [0] * 2 действительно представляет собой список из двух чисел, и ссылка на 0 не может быть изменена.

Если вы хотите создать копии клонов, попробуйте выполнить операцию 3:

import copy
y = [0] * 2   
print(y)   # [0, 0]

y = [y, copy.deepcopy(y)]  
print(y) # [[0, 0], [0, 0]]

y[0][0] = 1
print(y) # [[1, 0], [0, 0]]

еще один интересный способ создания копий клонов, операция 4:

import copy
y = [0] * 2
print(y) # [0, 0]

y = [copy.deepcopy(y) for num in range(1,5)]
print(y) # [[0, 0], [0, 0], [0, 0], [0, 0]]

y[0][0] = 5
print(y) # [[5, 0], [0, 0], [0, 0], [0, 0]]
1
задан Fantômas 24 March 2019 в 09:19
поделиться

1 ответ

в методе pickContacts, измените его, чтобы получить Contacts._ID, он случайно находит идентификатор, потому что оба RawContacts._ID и Contacts._ID являются строкой «_id», но это просто неправильно. ]

Затем, поскольку вы на самом деле захватываете идентификатор контакта, вам нужно изменить getContactDetails, чтобы он принимал ContactId, а не RawContactId.

Не уверен, почему вам нужно задействовать Entity API-интерфейсов подобным образом, если вам нужно только запросить данные этого контакта, сделайте следующее:

private void getContactDetails (long contactId) {
    Log.i("Contacts", "Get contact with id " + contactId);

    String[] projection = new String[]{Data.DISPLAY_NAME, Data.MIMETYPE, Data.DATA1};
    String selection = Data.CONTACT_ID + "=" + contactId;
    Cursor c = getContentResolver().query(Data.CONTENT_URI, projection, selection, null, null);
    if (c == null) {
        return;
    }
    try {
        while (c.moveToNext()) {
            String name = c.getString(0);
            String mimeType = c.getString(1);
            String data = c.getString(2);

            Log.i("Contacts", contactId + ", " + name + ", " + mimetype + ", " + data);
        }
    } finally {
        c.close();
    }
}
0
ответ дан marmor 24 March 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: