我想将存储在手机中的联系人放入在我的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
- 5. 如何在android上使用cordova获取联系人列表
- 6. 如何在Android中按组名称获取联系人列表?
- 7. 如何在Android中获取LinkedIn联系人或好友列表?
- 8. 如何使用android sdk获取喜爱的联系人列表?
- 9. 在Xamarin中获取Android联系人
- 10. 在android中获取当前联系人
- 11. 在android中获取联系人
- 12. 如何在Windows Phone联系人列表中获取联系人的ID?
- 13. 如何在android中的列表视图中获取联系人列表?
- 14. 如何从android联系人列表中获取skype信息
- 15. 如何从Android获取whatsapp联系人?
- 16. Android获取联系人列表,但没有SIM卡联系人
- 17. 如何在Android中获取联系人的groupId/GroupName?
- 18. 如何在android中获取联系人的号码类型?
- 19. 如何在Outlook 2016 c#中获取用户联系人列表?
- 20. 如何使用android studio从联系人列表中选择联系人号码?
- 21. 如何从BlackBerry联系人中取回联系人列表?
- 22. 如何获取联系人
- 23. Android联系人列表获取地址
- 24. 在android中使用oAuth获取雅虎联系人
- 25. 使用LOOKUP_URI在Android(API 8)中获取联系人照片
- 26. 在Exchange中使用JavaMail/Android通过IMAP获取联系人
- 27. 获取skype在android中的联系人列表和状态
- 28. 如何获取iOS 6中的用户联系人列表?
- 29. 如何在php中使用照片获取gmail联系人
- 30. 如何在Android中获取联系人信息?
有没有办法直接从ContactsContracts.data获取数据? – user6633315