Ich möchte die auf dem Telefon gespeicherten Kontakte in eine Tabelle übertragen, die in meiner SQLite-Datenbank erstellt wurde. Die Spalten zeigen die verschiedenen Felder wie Name, Telefonnummer, E-Mail usw. und jede Zeile zeigt einen anderen Kontakt. Wie erreiche ich das?Wie bekomme ich Kontakte in einer Tabelle in Android mit SQLite?
Antwort
Verwenden Androiden Content-Provider Kontakte Daten als Cursor zu bekommen und dann Cursor Zeilen durchlaufen und Daten speichern Erlaubnis SQLite
Erste hinzufügen: -
<uses-permission android:name="android.permission.READ_CONTACTS" >
</uses-permission>
dann in Java-Klasse: -
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phones.close();
In while-Schleife Basis Ihrer sQLite Daten hinzufügen
das ich habe, so mir Probleme mit dem getContentResolver(). erhalte ich die Fehler android.content.Context.getContentResolver()‘auf ein Null-Objekt Referenz
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "EventBoard.db";
public static final String EVENTS_TABLE = "Events";
public static final String GUESTS_TABLE = "Guests";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + EVENTS_TABLE + "(_id INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Time TEXT,Date TEXT,Venue TEXT,Contact TEXT,Description TEXT);");
db.execSQL("create table " + GUESTS_TABLE + "(Name TEXT,Phone TEXT,Email TEXT);");
createGuestsTable(this);
}
Das ist mein createGuestsTable ist (Context Kontext) Methode
public void createGuestsTable(Context context){
Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
while(phones.moveToNext()){
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String email = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("Name", name);
contentValues.put("Phone", phoneNumber);
contentValues.put("Email", email);
db.insert(GUESTS_TABLE,null,contentValues);
}
}
Es gibt ein Problem mit der Weitergabe von Kontext. –
Ist Ihre DatabaseHelper-Klasse und diese Methode createGuestSTable in einer anderen Java-Datei als der Hauptaktivitätsdatei? –
ja DatabaseHelper ist eine separate Java-Datei und CreateGuestsTable ist eine Methode dieser Java-Datei – user6633315
versuchen dies zu tun: -
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "EventBoard.db";
public static final String EVENTS_TABLE = "Events";
public static final String GUESTS_TABLE = "Guests";
public Context ctx;
public DatabaseHelper(Context context) {
ctx = context;
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + EVENTS_TABLE + "(_id INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Time TEXT,Date TEXT,Venue TEXT,Contact TEXT,Description TEXT);");
db.execSQL("create table " + GUESTS_TABLE + "(Name TEXT,Phone TEXT,Email TEXT);");
createGuestsTable(ctx);
}
'öffentliche void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Titel entfernen requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow(). SetFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView (R.layout.activity_main); myDb = new DatabaseHelper (this); myDb.createGuestsTable (this); } ' Das ist, was ich getan habe. Ich habe meine Methode in meiner MainActivity anstelle der DatabaseHelper-Klasse aufgerufen. Es hat funktioniert. Ist es eine gute Übung? – user6633315
Code, den Sie tun, ist in Ordnung. Um Ihren Code zu organisieren, sollten Sie eine eigene Klasse für Ihre Aufgaben erstellen. Da es jedoch nur einen kleinen Teil des Codes zum Schreiben von Datenbanken gibt, können Sie auch mit einer Java-Datei fortfahren. –
Und wenn Sie eine separate Datei für diese haben möchten, dann denke ich, dass der obige Code funktionieren sollte. Das einzige Problem, mit dem Sie in der Nullzeiger-Ausnahme konfrontiert wurden, war der Kontext. Übergeben Sie also den Hauptaktivitätenkontext –
Gibt es eine Möglichkeit, Daten direkt von ContactsContracts.data zu erhalten? – user6633315