Android Activity.managedQuery selection and selectionArgs arguments
Most of the examples of managedQuery don't use the selection and selectionArgs arguments, others are pretty simple like :
or
The '?'s are the elements in the array in order they are placed. [Resource]
I was working on a piece of code that stored IDs in SharedPreferences and then loaded the elements with those IDs into a ListView from a ContentProvider.
Basically I was trying to get that :
WHERE id IN ( id1, id2, id3, id4,...)
So the selection argument looked like that :
"id IN ( ? " + [",? "] + " )"
and the selection args stored the ID of elements I wanted to load.
Hope that not-that-trivial example make this topic more clear. If you would like to know more about ContentProviders or managedQuery I suggest you try this or the Notepad Tutorial.
Cursor simple(String id) {
return managedQuery(getIntent().getData(), PROJECTION,
"id = " + id, null, DEFAULT_SORT_ORDER);
}or
Cursor simple(String id) {
return managedQuery(getIntent().getData(), PROJECTION,
"id = ?", new String [] ={id}, DEFAULT_SORT_ORDER);
}Both of the above do exacly the same thing.The '?'s are the elements in the array in order they are placed. [Resource]
I was working on a piece of code that stored IDs in SharedPreferences and then loaded the elements with those IDs into a ListView from a ContentProvider.
Basically I was trying to get that :
WHERE id IN ( id1, id2, id3, id4,...)
So the selection argument looked like that :
"id IN ( ? " + [",? "] + " )"
and the selection args stored the ID of elements I wanted to load.
SharedPreferences data = getSharedPreferences("elementList",0);
Map <String, Integer> map = (Map<String, Integer>)data.getAll();
if (map.size() == 0) {
return;
}
int i = 0;
Iterator it = map.entrySet().iterator();
String str [] = new String [map.size()];
while ( it.hasNext() ) {
Map.Entry<String,Integer> pair
= (Map.Entry<String,Integer>)it.next()
str[i++] = pair.getKey();
Log.i(this.getLocalClassName(), "pair key " + str[i-1]);
}
String whereClause = Prod._ID + " IN ( ?";
if (map.size()>1) {
for (int j = 1 ; j < map.size(); ++j) {
whereClause+=", ?";
}
}
whereClause+=")";
Log.i(this.getLocalClassName(), whereClause);
Cursor cursor = managedQuery(getIntent().getData(), PROJECTION,
whereClause , str, DEFAULT_SORT_ORDER);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this, R.layout.element_list_item,
cursor, new String[] { NAME, DETAILS},
new int[] { android.R.id.text1, android.R.id.text2 }
);
elemList.setAdapter(adapter);
Hope that not-that-trivial example make this topic more clear. If you would like to know more about ContentProviders or managedQuery I suggest you try this or the Notepad Tutorial.
Comments
Post a Comment