| |||||||
Das Thema "select Anweisung (where, selectionArgs)" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 02.12.2010
Beiträge: 52
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
| Die Verbindung klappt so schon, nur werden momentan ALLE Daten ausgegeben, da ich noch keine Bedinung gestellt habe... wenn ich hier die where einbinde, wird nichts mehr ausgegeben: Code: return mContentResolver.query(CONTENT_URI, null, were , selectionArgs, null); Code: where = String.format("(%s LIKE ?) ", name);
String filter = String.valueOf(constraint) + '%';
selectionArgs = new String[] { filter, filter }; Code: public class ContactAdapter extends ResourceCursorAdapter {
private static final Uri CONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
private final ContentResolver mContentResolver;
String name;
public ContactAdapter(Context context) {
super(context, R.layout.dropdown_item, null);
mContentResolver = context.getContentResolver();
}
@Override
public final String convertToString(Cursor cursor) {
String projection = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
return projection;
}
@Override
public final void bindView(View view, Context context, Cursor cursor) {
TextView textFeldName = (TextView) view.findViewById(R.id.name);
TextView textFeldTelefon = (TextView) view.findViewById(R.id.telefon);
TextView textFeldTyp = (TextView) view.findViewById(R.id.typ);
name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String numberType = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
if (numberType.equals("0"))
numberType = "Work";
else if (numberType.equals("1"))
numberType = "Home";
else if (numberType.equals("2"))
numberType = "Mobile";
else
numberType = "Other";
textFeldName.setText(name);
textFeldTelefon.setText(phoneNumber);
textFeldTyp.setText(numberType);
}
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
String where = null;
String[] selectionArgs = null;
if (constraint != null) {
where = String.format("(%s LIKE ?) ", name);
String filter = String.valueOf(constraint) + '%';
selectionArgs = new String[] { filter, filter };
}
return mContentResolver.query(CONTENT_URI, null, null , null, null);
}
} |
| | |
| | #3 (permalink) |
| Android-Hilfe.de Mitglied Modell: Galaxy Nexus + Toshiba AC100 Registriert seit: 30.03.2010
Beiträge: 76
Abgegebene Danke: 5
Erhielt 9 Danke für 8 Beiträge
|
Das %-Zeichen in der Variable filter wird maskiert wenn es als Auswahlargument übergeben wird. Wenn das % zum LIKE gehören soll muss es mit in die where-Variable. Da musst Du es dann ebenfalls markieren, damit es nicht als Argument vom FormatString gewertet wird. Code: where = String.format("(%s LIKE ?%%) ", name);
String filter = String.valueOf(constraint);
selectionArgs = new String[] { filter, filter }; Edit: @Ciraxis: das kanns nicht sein, dann wäre das Kompilieren schon fehlgeschlagen. |
| | |
| | #4 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 02.12.2010
Beiträge: 52
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
logisch danke xD aber durch umbenennen der variable ist der Fehler auch nicht behoben ![]() hat jemand in der zwischenzeit zufällig iwas fehlerhaftes gesehen?! edit: 2 eintrag nicht gesehn, ja...da ist schon mal ein fehler..hab vorher zwei argumente in der were anweisung gehabt... werd das mal sofort prüfen... danke schonmal |
| | |
| | #5 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 02.12.2010
Beiträge: 52
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
Hm also daran lag es auch nicht ![]() sobald ich sowie die selectionArgs einbinde, wird einfach kein Kontakt mehr angezeigt ![]() Code: if (constraint != null) {
were = String.format("(%s LIKE ?%%) ", name);
String filter = String.valueOf(constraint);
selectionArgs = new String[] { filter};
}
return mContentResolver.query(CONTENT_URI, null, were , selectionArgs, null); |
| | |
| | #6 (permalink) | |
| Android-Hilfe.de Mitglied Modell: Galaxy Nexus + Toshiba AC100 Registriert seit: 30.03.2010
Beiträge: 76
Abgegebene Danke: 5
Erhielt 9 Danke für 8 Beiträge
|
Hab mal in die Dokumentation geguckt: da steht: Zitat:
Code: were = String.format("(%s LIKE ?s%%) ", name); Code: were = String.format("(%s LIKE %%?s%%) ", name); | |
| | |
| | #7 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 02.12.2010
Beiträge: 52
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
jea!! ich habs (bis auf einen kleinen Fehler) hinbekommen...Hier erstmal ein großes Dankeschön an alle die mitgeholfen haben! Momentan funktioniert das Programm genauso wie ich wollte, allerdings wird eine Exeption geworfen, wenn sich nur 1 bzw 0 zeichen in der suchleiste befinden (beim eintippen bzw löschen)...wenn ich per log den constraint ausgeben, werden aber alle zeichen übergeben. 05-14 10:53:52.729: WARN/Filter(1461): An exception occured during performFiltering()! 05-14 10:53:52.729: WARN/Filter(1461): java.lang.NullPointerException 05-14 10:53:52.729: WARN/Filter(1461): at test.test.ContactAdapter.runQueryOnBackgroundThrea d(ContactAdapter.java:64) 05-14 10:53:52.729: WARN/Filter(1461): at android.widget.CursorFilter.performFiltering(Curso rFilter.java:49) 05-14 10:53:52.729: WARN/Filter(1461): at android.widget.Filter$RequestHandler.handleMessage (Filter.java:234) 05-14 10:53:52.729: WARN/Filter(1461): at android.os.Handler.dispatchMessage(Handler.java:99 ) 05-14 10:53:52.729: WARN/Filter(1461): at android.os.Looper.loop(Looper.java:123) 05-14 10:53:52.729: WARN/Filter(1461): at android.os.HandlerThread.run(HandlerThread.java:60 ) --> Der funktionierende Code - aber mit Exeptionbei 0/1 zeichen Code: public Cursor runQueryOnBackgroundThread(CharSequence constraint){
String[] selectionArgs = null;
String name = ContactsContract.Contacts.DISPLAY_NAME;
String number = ContactsContract.CommonDataKinds.Phone.NUMBER;
String were = String.format("(%s LIKE ?) OR (%s LIKE ?)", name, number);
String filter = String.valueOf("%" + constraint.toString ()+"%");
selectionArgs = new String[]{filter, filter};
return mContentResolver.query(CONTENT_URI, null, were, selectionArgs, null);
} Geändert von assenda (15.05.2011 um 18:11 Uhr) Grund: ergänzung |
| | |
| | #8 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 02.12.2010
Beiträge: 52
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
Übrigens ist die Exeption nur eine Warnung und kein Error... Ist das schlimm?! Wenn ich den Filter per logCat ausgebe, bekomme ich folgende ausgaben ab 2 Buchstaben: %da% (Wobei da für das eingegebene suchwort steht) Wenn ich nur d eingebe, bzw a lösche, wird gar nichts mehr ausgegeben und ich erhalte die null-pointer exeption... Vermutlich, weil das autocomplete erst ab 2buchstaben anfängt zu suchen... Kann jemand bitte einen tipp geben?! Geändert von assenda (15.05.2011 um 18:11 Uhr) |
| | |
| | #9 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 02.12.2010
Beiträge: 52
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
Ok ich bin selber dahinter gekommen.. die null-Pointer Exeption ist nur gekommen, weil erst bei 2 buchstaben der constraint übergeben wird. Da ich immer ein constraint.toString() durchgeführt habe, war war bei 0/1 zeichen kein charelement in constraint. folgender code löst dieses Problem: Code: public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
String[] selectionArgs = null;
String name = ContactsContract.Contacts.DISPLAY_NAME;
String number = ContactsContract.CommonDataKinds.Phone.NUMBER;
String were = String.format("(%s LIKE ?) OR (%s LIKE ?)", name, number);
if (String.valueOf(constraint) != "null") {
String filter = String.valueOf("%" + constraint.toString() + "%");
selectionArgs = new String[] { filter, filter };
}
return mContentResolver.query(CONTENT_URI, null, were, selectionArgs, null);
} |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Navigon Select gratis? | hilda | Karten und Navigation | 6 | 27.12.2011 15:28 |
| Navigon Select erweitern | Yellowstone | Karten und Navigation | 7 | 30.01.2011 22:22 |
| Navigon Select | BVBFan4ever | Karten und Navigation | 5 | 03.01.2011 10:00 |
| Navigon select + Nachtmodus?! | dweazel | HTC Desire HD Forum | 8 | 15.12.2010 19:43 |
| SQLite Select LIMIT | MBPower | Android App Entwicklung | 3 | 27.04.2010 22:10 |