2016-07-25 25 views

Antwort

0

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

+0

Gibt es eine Möglichkeit, Daten direkt von ContactsContracts.data zu erhalten? – user6633315

0

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); 
    } 
} 
+0

Es gibt ein Problem mit der Weitergabe von Kontext. –

+0

Ist Ihre DatabaseHelper-Klasse und diese Methode createGuestSTable in einer anderen Java-Datei als der Hauptaktivitätsdatei? –

+0

ja DatabaseHelper ist eine separate Java-Datei und CreateGuestsTable ist eine Methode dieser Java-Datei – user6633315

0

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); 
} 
+0

'ö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

+0

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. –

+0

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 –