2016-04-18 31 views
-1

Ich baue eine Android-Anwendung, die alle Kontaktinformationen vom Gerät sammelt (via SQLite, glaube ich). Leider benötige ich einige zusätzliche Informationen aus dem Internet, die ich in der genannten Datenbank speichern möchte, um beim nächsten Öffnen der App die von mir zur Verfügung gestellten Dinge abfragen zu können, damit er sie auch ohne Netzwerkverbindung nutzen kann. Ich verwende Inhaltsanbieter, um Kontaktdetails zu erhalten.Wie kann ich eine SQLite-Datenbank "erweitern"?

Was ist der effizienteste und relativ einfache Weg, dies zu erreichen?

+0

holen Sie alle Kontakte vom Gerät und speichern Sie es in der Datenbank Ihrer App zusammen mit geänderten Werten –

+0

Das würde bedeuten, dass ich den Inhalt meiner Datenbank dann die Standarddatenbank bekommen muss. Aktualisieren Sie meins, wenn es Unterschiede gibt, und speichern Sie sie nach dem Herunterfahren. Wäre das nicht langsam? – Ukubu

+0

Nein zu Beginn Ihrer App erhalten Sie alle Kontakte und speichern Sie sie in der App-Datenbank. Fragen Sie nicht immer die Datenbank des Telefons ab und nehmen Sie Änderungen in der App-Datenbank vor. –

Antwort

1

Sie müssen Ihren eigenen Inhaltsanbieter erstellen - mit SQLite als Speichertechnologie. Sie müssen eine Klasse erstellen, die SQLiteOpenHelper erweitert - Bereitstellung für die onCreate(Database database) und dort geben Sie die SQL-Abfrage zum Erstellen der Tabelle, wie Sie es wünschen. Zum Beispiel:

public class YourDBHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "yourDB.db"; 
    private static final int DATABASE_VERSION = 1; 

    public YourDBHelper (Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase database) { 
     //here you write the code to create the table as you desire: 
     String query = "CREATE TABLE MoreContactInfo <your columns def>..."; 
     database.execSQL(query); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { 
     //do the upgrade (e.g drop and create table) 
    } 
} 

nun den Content-Provider zu implementieren, erweitern Sie die ContentProvider Klasse: public class YourContentProvider extends ContentProvider.
Und in der onCreate Rückruf von YourContentProvider Klasse Sie Ihre SQLite-Helfer instanziiert (dh YourDBHelper.): Das folgende Beispiel Siehe:

... 
    private YourDBHelper yourDatabase = null; 
    @Override 
    public boolean onCreate() { 
     yourDatabase = new YourDBHelper(getContext());  
     return false; 
    } 

Daten einzufügen, können Sie die Insert-Methode wie folgt außer Kraft setzen:

@Override 
public Uri insert(Uri uri, ContentValues values) { 
    //ideally you use URI-Matcher to figure out who to treat the insert  
    SQLiteDatabase sqlDB = yourDatabase.getWritableDatabase(); 

    long id = sqlDB.insert("<your-table-name-here>", null, values);  
    return Uri.parse("<your-content-provider-base-uri"> +"/"+id); 

} 

Ich weiß, dass dies eine Menge Arbeit zu sein scheint, aber ich denke, dass Sie dies tun müssen, um Ihren eigenen Inhaltsanbieter zu haben, der es Ihnen ermöglicht, Daten in Ihrer Android-App standardmäßig zu speichern und abzurufen. Ich habe eine Code-Walk-Through-Präsentation here, wenn Sie interessiert sind.

+0

Das scheint die gute Antwort zu sein. Ich werde auch einen Blick auf Ihre Präsentation werfen. Vielen Dank. :) – Ukubu

Verwandte Themen