我想將存儲在手機中的聯繫人放入在我的SQLite數據庫中創建的表中。 列顯示不同的字段,例如姓名,電話號碼,電子郵件等 ,每行顯示不同的聯繫人。 我該如何做到這一點?如何使用SQLite在Android中的表中獲取聯繫人?
回答
使用機器人內容提供商獲取聯繫人數據的光標,然後遍歷光標行和保存數據的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數據庫
我有這樣的我與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);
}
}
您的上下文傳遞存在一些問題。 –
是你的DatabaseHelper類和這個方法createGuestsTable在單獨的java文件,然後主要活動文件? –
yes databasehelper是一個單獨的java文件,createGuestsTable是這個java文件的一個方法 – user6633315
試着這樣做: -
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);
}
'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
你正在做的代碼很好。爲了組織你的代碼,爲你的任務創建一個單獨的類是一個好習慣。但是由於數據庫寫入只有一小部分代碼,所以您可以繼續使用一個java文件。 –
如果你想爲這個單獨的文件,那麼我認爲我的上面的代碼應該工作。您在空指針異常中遇到的唯一問題是上下文。因此傳遞主要活動上下文 –
- 1. 如何在Android中獲取聯繫人
- 2. 如何從android中的聯繫人獲取聯繫人號碼?
- 3. 如何獲取Android聯繫人列表上聯繫人的ID?
- 4. 如何使用android sdk獲取喜愛的聯繫人列表?
- 5. 在android中獲取當前聯繫人
- 6. 在android中獲取聯繫人
- 7. 如何在Windows Phone聯繫人列表中獲取聯繫人的ID?
- 8. Android獲取聯繫人列表,但沒有SIM卡聯繫人
- 9. 如何在android中獲取聯繫人的號碼類型?
- 10. 如何在Android中獲取聯繫人的groupId/GroupName?
- 11. 如何在Outlook 2016 c#中獲取用戶聯繫人列表?
- 12. 如何從BlackBerry聯繫人中取回聯繫人列表?
- 13. 如何獲取聯繫人
- 14. 使用LOOKUP_URI在Android(API 8)中獲取聯繫人照片
- 15. 在Exchange中使用JavaMail/Android通過IMAP獲取聯繫人
- 16. 在android中使用oAuth獲取雅虎聯繫人
- 17. 如何獲取msn聯繫人列表?
- 18. 如何在android中獲取聯繫人號碼?
- 19. 如何在android中獲取雅虎聯繫人
- 20. 在android中獲取聯繫人並與列表進行比較
- 21. 如何從android中的聯繫人獲取電話號碼
- 22. 如何從複選框(Android)中獲取選定的聯繫人
- 23. 在Android中的原始聯繫人中使用帳戶名查詢時獲取Null聯繫人ID
- 24. 使用聯繫人框架獲取緩慢的聯繫人
- 25. 使用光標獲取聯繫人拋出異常的SQLite
- 26. 如何在C#中獲取Hotmail聯繫人列表?
- 27. 如何從Android的Exchange Server獲取聯繫人列表?
- 28. Android應用:從聯繫人列表中檢索「我」聯繫人
- 29. 如何獲取所有android聯繫人但沒有SIM卡上的聯繫人
- 30. 如何在android中創建聯繫人
有沒有辦法直接從ContactsContracts.data獲取數據? – user6633315