我正在尝试访问Xamarin Forms应用中的用户联系人。我编写了特定于平台的实现,并使用DependencyService来调用它们,这似乎工作正常。但是,当我测试Android实现时,我收到错误,代码在以下代码中抛出IllegalArgumentException:
var uri = ContactsContract.Contacts.ContentUri;
string[] projection = { ContactsContract.Contacts.InterfaceConsts.Id,
ContactsContract.CommonDataKinds.StructuredName.GivenName,
ContactsContract.CommonDataKinds.StructuredName.FamilyName,
ContactsContract.CommonDataKinds.Phone.Number,
ContactsContract.CommonDataKinds.Email.Address};
var phoneLoader = new CursorLoader(Android.App.Application.Context, uri, projection, null, null, null);
var cursor = (Android.Database.ICursor)phoneLoader.LoadInBackground();
我也试过通过以下方式获取光标:
var cursor = Forms.Context.ApplicationContext.ContentResolver.Query(uri, projection, null, null, null);
我也尝试了以下内容:
var phoneLoader = new CursorLoader(Android.App.Application.Context);
phoneLoader.SetProjection(projection);
phoneLoader.Uri = ContactsContract.Contacts.ContentUri;
var cursor = (Android.Database.ICursor)phoneLoader.LoadInBackground();
但是会抛出完全相同的错误:
09-09 14:27:22.163 I/MonoDroid(10022): UNHANDLED EXCEPTION:
09-09 14:27:22.222 I/MonoDroid(10022): Java.Lang.IllegalArgumentException: Invalid column data2
09-09 14:27:22.223 I/MonoDroid(10022): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <896ad1d315ca4ba7b117efb8dacaedcf>:0
09-09 14:27:22.223 I/MonoDroid(10022): at Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method) [0x00068] in <6cd960837cc24c26bab2a0a29b597627>:0
09-09 14:27:22.223 I/MonoDroid(10022): at Android.Runtime.JNIEnv.CallObjectMethod (System.IntPtr jobject, System.IntPtr jmethod) [0x0000e] in <06064416b46d4ffbb3484c957929a39f>:0
09-09 14:27:22.223 I/MonoDroid(10022): at Android.Content.CursorLoader.LoadInBackground () [0x00043] in <06064416b46d4ffbb3484c957929a39f>:0
它就在这一行:
cursor = (Android.Database.ICursor)phoneLoader.LoadInBackground();
有人能看到导致错误的上述代码有什么问题吗?
答案 0 :(得分:1)
java.Lang.IllegalArgumentException:列数据2无效
该列确实存在于您的数据库中,如果您尚未将该列添加到名为投影地图的内容中,则您将获得&#34;无效列&#34;你看到的错误。
在投影中,setInterval
不是您要查询的ContactsContract.CommonDataKinds
表的一部分。
访问Xamarin Forms应用程序中的用户联系人
以下是访问用户联系人的另一种解决方案:
Contacts
答案 1 :(得分:0)
尝试更改uri以使用ContactsContract.CommonDataKinds.Phone.ContentUri
var uri = ContactsContract.CommonDataKinds.Phone.ContentUri;
string[] projection = {
ContactsContract.Contacts.InterfaceConsts.Id,
ContactsContract.CommonDataKinds.StructuredName.GivenName,
ContactsContract.CommonDataKinds.StructuredName.FamilyName,
ContactsContract.CommonDataKinds.Phone.Number,
ContactsContract.CommonDataKinds.Email.Address
};
var loader = new CursorLoader(Android.App.Application.Context, uri, projection, null, null, null);
var cursor = loader.LoadInBackground();