2016-07-25 84 views

回答

0

使用機器人內容提供商獲取聯繫人數據的光標,然後遍歷光標行和保存數據的SQLite

首先添加權限: -

<uses-permission android:name="android.permission.READ_CONTACTS" > 
</uses-permission> 

然後在Java類: -

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(); 

在while循環中添加到您的sqlite數據庫

+0

有沒有辦法直接從ContactsContracts.data獲取數據? – user6633315

0

我有這樣的我與getContentResolver()的麻煩。 我得到的錯誤 android.content.Context.getContentResolver()」上一個空對象引用

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

這是我createGuestsTable(上下文的背景下)方法

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

您的上下文傳遞存在一些問題。 –

+0

是你的DatabaseHelper類和這個方法createGuestsTable在單獨的java文件,然後主要活動文件? –

+0

yes databasehelper是一個單獨的java文件,createGuestsTable是這個java文件的一個方法 – user6633315

0

試着這樣做: -

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

'public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //刪除標題 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); }' 這就是我所做的。我在我的MainActivity而不是DatabaseHelper類中調用了我的方法。它的工作......這是一個好習慣嗎? – user6633315

+0

你正在做的代碼很好。爲了組織你的代碼,爲你的任務創建一個單獨的類是一個好習慣。但是由於數據庫寫入只有一小部分代碼,所以您可以繼續使用一個java文件。 –

+0

如果你想爲這個單獨的文件,那麼我認爲我的上面的代碼應該工作。您在空指針異常中遇到的唯一問題是上下文。因此傳遞主要活動上下文 –

相關問題