I need help with this.
I am trying to query table strequent( ContactsContract.CONTENT_STREQUENT_URI) on Android in order to get marked and most common contacts.
Cursor cursor = context.getContentResolver().query(Contacts.CONTENT_STREQUENT_URI,
new String[]{Contacts._ID, Contacts.LOOKUP_KEY, Contacts.STARRED, Utils.hasHoneycomb() ? Contacts.DISPLAY_NAME_PRIMARY
: Contacts.DISPLAY_NAME}, null,
null, null
);
It works great on most devices and Android versions. But in versions of Android 4.1.2 I get thisSQLiteException
{AsyncTask
while compiling: SELECT * FROM (SELECT _id, lookup, starred, display_name, 9223372036854775807
AS times_used, 9223372036854775807 AS last_time_used FROM view_contacts WHERE
(view_contacts.[single_is_restricted] = 0(1)) AND (starred=1) GROUP BY _id ORDER
BY display_name COLLATE LOCALIZED ASC) UNION ALL SELECT * FROM (SELECT _id,
lookup, starred, display_name, SUM(data_usage_stat.times_used) AS times_used,
MAX(data_usage_stat.last_time_used) AS last_time_used FROM view_data_usage_stat AS
data_usage_stat INNER JOIN view_contacts ON ((data_usage_stat.times_used > 0) AND
(contact_id=view_contacts._id)) WHERE (view_contacts.[single_is_restricted] = 0
AND ((starred =0 OR starred IS NULL) AND account_type NOT IN
('com.android.contacts.sim'))) GROUP BY _id HAVING contact_id IN default_directory
ORDER BY (CASE WHEN (strftime('%s', 'now') - last_time_used/1000) < 259200 THEN 0
WHEN (strftime('%s', 'now') - last_time_used/1000) < 2592000 THEN 1 ELSE 2 END),
times_used DESC LIMIT 10) at
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:184) at
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140) at
android.content.ContentProviderProxy.query(ContentProviderNative.java:366) at
android.content.ContentResolver.query(ContentResolver.java:371) at
android.content.ContentResolver.query(ContentResolver.java:314) at
(...)
I am sure that this other SQLiteExceptionone that I am using in versions of Android 4.4.2 is related to:
android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while
compiling: SELECT * FROM (SELECT _id, lookup, starred, display_name,
9223372036854775807 AS times_used, 9223372036854775807 AS last_time_used FROM
view_contacts WHERE (view_contacts.[single_is_restricted] = 0 AND ) AND
(starred=1) GROUP BY _id ORDER BY display_name COLLATE LOCALIZED ASC) UNION ALL
SELECT * FROM (SELECT _id, lookup, starred, display_name,
SUM(data_usage_stat.times_used) AS times_used, MAX(data_usage_stat.last_time_used)
AS last_time_used FROM view_data_usage_stat AS data_usage_stat INNER JOIN
view_contacts ON ((data_usage_stat.times_used > 0) AND
(contact_id=view_contacts._id)) WHERE (view_contacts.[single_is_restricted] =
0((starred =0 OR starred IS NULL) AND account_type NOT IN
('com.android.contacts.sim'))) GROUP BY _id HAVING contact_id IN default_directory
ORDER BY (CASE WHEN (strftime('%s', 'now') - last_time_used/1000) < 259200 THEN 0
WHEN (strftime('%s', 'now') - last_time_used/1000) < 604800 THEN 1 WHEN
(strftime('%s', 'now') - last_time_used/1000) < 1209600 THEN 2 WHEN
(strftime('%s', 'now') - last_time_used/1000) < 2592000 THEN 3 ELSE 4 END),
times_used DESC LIMIT 10) WHERE (strftime('%s', 'now') - last_time_used/1000)
<2592000 at
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:181) at
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) at
android.content.ContentProviderProxy.query(ContentProviderNative.java:413) at
android.content.ContentResolver.query(ContentResolver.java:464) at
android.content.ContentResolver.query(ContentResolver.java:407) at
(...)
I understand that Android Content Resolver is not building the SQL query correctly. Am I missing something? Has anyone come across this or can offer a workaround? Is there another / simpler query that can be used? I would like to keep this feature for these versions of Android :(