Uri in ContentProvider

  • 3 Antworten
  • Neuester Beitrag
Diskutiere Uri in ContentProvider im Android App Entwicklung im Bereich Betriebssysteme & Apps.
0

0xnull

Neues Mitglied
Hallo zusammenm

leider verwirrt mich die URI-Logik in Content Provider etwas. Ich habe eine Datenbank, die aus drei Tabellen besteht. Für diese möchte ich einen ContentProvider implementieren.

Lege ich nun für jede Tabelle eine URI an oder für jeden Abfrage-Typen? Die Daten machen nämlich nur Sinn, wenn ich sie durch JOINs bekomme. Einige Tabellen werden nie alleine abgefragt.

Vielen Dank
 
Zuletzt bearbeitet:
derjens

derjens

Ambitioniertes Mitglied
Schönen guten Abend.

Der dritte wert ist ein int nach dem du dann in deiner query oder insert Methode deinen switch Zweig auswerten kannst.
Jedenfalls habe ich das so verstanden und umgesetzt :cool2:

Code:
//STATIC INT für switch cases erstellen
private static final int BENUTZER_DIRECTORY = 10;
private static final int BENUTZER_ITEM = 20;

STATIC INT für switch cases erstellen
//UriMatcher sURIMatcher
sURIMatcher.addURI(AUTHORITY, BenutzerTable.CONTENT_DIRECTORY, BENUTZER_DIRECTORY);
sURIMatcher.addURI(AUTHORITY, BenutzerTable.CONTENT_DIRECTORY+"/#", BENUTZER_ITEM);

@Override
public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        switch(sURIMatcher.match(uri)) {
        
        //BENUTZER
        case BENUTZER_DIRECTORY:
            return dbhelper.getReadableDatabase().query(BenutzerTable.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
        case ABENUTZER_ITEM:
        {
            long id = ContentUris.parseId(uri);
            String _selection = "(" + BenutzerTable.Columns._ID + "=" + id + ")";
            if (selection!=null && !selection.isEmpty())
              {
                  _selection = _selection + " and "+selection;
              }
            return dbhelper.getReadableDatabase().query(BenutzerTable.TABLE_NAME, projection, _selection, selectionArgs, null, null, sortOrder);
        }
Hoffe das hilft dir irgendwie weiter.

Gruß
derjens
 
Zuletzt bearbeitet:
0

0xnull

Neues Mitglied
Hey,

danke für deine Antwort. Wundere dich nicht, aber anscheind hat sich meine Threadänderung mit deiner Antwort überschnitten. Deine Antwort hilft mir trotzdem weiter.

Wie sieht es denn mit dem Anlegen einer URI aus? Für jede Tabelle oder für jede mögliche Query?

Wenn ich eine Query habe, die einen JOINT über drei Tabellen erfordert, dann muss es doch für die Query eine URI geben, denn nur so kann ich im switch Statement in den entsprechenden Zwei springen!?

Danke
 
derjens

derjens

Ambitioniertes Mitglied
Hallo Du

Mit den JOINs kann ich dir leider nicht so wirklich helfen,
da ich meine JOINs alle über SQLite VIEWs realisiert habe.

Würde mich aber auch mal Interessieren wie man das vielleicht besser lösen kann.
Aber mit den VIEWs bin ich eigentlich ganz zufrieden.

Gruß
derjens