我正在编写一个Android应用程序,其数据类型代表一个人(特别是孩子的父母或监护人).我希望能够从Android设备的"联系人"数据库中"导入"相关数据字段.(这应该是可选的;也就是说,不要求父/监护人已经在联系人数据库中,如果他们添加新的父母/监护人,也不会更新联系人数据库.)
到目前为止,我已经编写了代码来启动一个新的Intent来选择特定的Contact(使用Intent.ACTION_PICK).然后,我获得一个表示数据库中特定联系人的URI.
不幸的是,我不知道下一步是什么.看起来这应该是世界上最简单的事情,但显然不是.我已经阅读了Android开发者网站上的文档,并查看了多本Android手册.没有快乐.
我想得到的具体信息是:
联系人的姓名(如果可能的话,首先和最后一个)
联系人(主要)电子邮件地址
联系人的手机号码
我想通过查询使用ContentResolver可以实现这一点,但我不知道如何使用Intent返回的URI来做到这一点.大多数文档假定您具有联系人ID,而不是联系人的URI.此外,我不知道我可以在查询的投影中添加哪种字段,假设这甚至是我想要的正确方法.
这是我的起始代码:
// In a button's onClick event handler:
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
// In onActivityResult:
if (resultCode == RESULT_OK) {
if (requestCode == PICK_CONTACT) {
contactURI = data.getData();
// NOW WHAT?
}
}
Run Code Online (Sandbox Code Playgroud) android android-intent android-contentprovider android-contacts
我正在学习一门课程的Android编程,我有一个关于finish()如何适应Activity生命周期的快速问题.
当你调用finish()时,会启动什么生命周期回调?我认为它是onPause(),然后是onStop()和onDestroy().它是否正确?
真的,我只是想确保它不会直接跳到onDestroy().
我正在努力学习C++编译器如何处理引用和指针,以便为下一学期的编译器类做准备.我对编译器如何处理C++中的引用特别感兴趣.
该标准指定引用是"别名",但我不确切地知道它在编译器级别的含义.我有两个理论:
非引用变量在符号表中有一个条目.当创建对该变量的引用时,编译器只是创建另一个词汇,该词汇"指向"符号表中的完全相同的条目(而不是内存中的非引用变量的位置).
当创建对该变量的引用时,编译器会在内存中创建指向该变量位置的指针.解析语言的上下文时会处理对引用的限制(无空值等).换句话说,引用是解除引用指针的"语法糖".
据我所知,这两种解决方案都会产生"别名".编译器是使用一个而不是另一个?还是依赖于编译器?
顺便说一句,我知道在机器语言级别,两者都是"指针"(除了整数之外的所有东西都是机器级别的"指针").我对生成机器代码之前编译器的作用感兴趣.
编辑:我很好奇的部分原因是因为PHP使用方法#1,我想知道C++编译器是否以相同的方式工作.Java肯定不使用方法#1,它们的"引用"实际上是解引用的指针; 请参阅Scott Stanchfield 撰写的这篇文章.
我正在尝试编写一个打印出多维数组内容的函数.我知道列的大小,但不知道行的大小.
编辑:因为我没有说清楚,传递给这个函数的数组不是动态分配的.这些大小在编译时是已知的.
我正在使用3x2阵列进行测试.这是现有的功能:
void printArrays(int array1[][2], int array2[][2]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
cout << "\narray1[" << i << "][" << j << "] = "
<< setfill('0') << setw(2) << array1[i][j]
<< "\tarray2[" << i << "][" << j << "] = "
<< setfill('0') << setw(2) << array2[i][j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这只有在我知道"i"的大小为3(在这种情况下)时才有效.然而,理想情况下,无论第一维的大小如何,我都希望该函数能够工作.
我以为我可以使用sizeof()函数来做到这一点,例如
int size = sizeof(array1);
Run Code Online (Sandbox Code Playgroud)
......从那里做一些数学.
这是奇怪的部分.如果我在数组中使用sizeof()函数,它返回值4.我可以使用指针表示法取消引用数组:
int size = …
Run Code Online (Sandbox Code Playgroud) 这是专门针对的Eclipse IDE
.我知道可以通过以下方式编辑任务标签的color
(和font
等):
Preferences->Java->Editor->Syntax Coloring->Comments->Task Tags
Run Code Online (Sandbox Code Playgroud)
但我想做的是为不同的任务标签优先级定义不同的颜色.例如,TODO
是普通优先级,因此应该是蓝色; 虽然FIXME
是高优先级,所以应该是红色的.
这可能吗?如果是这样,怎么样?
编辑:这是在Java编辑器本身.
所有.我的C++教授向我提出了一个有趣的问题.它显然也用于一些编程工作面试.
这是情况.我有一个int的二维数组(矩阵):
int array1[][2] = {{11, 12}, {21, 22}};
Run Code Online (Sandbox Code Playgroud)
我想创建第二个二维数组array2,它指向第一个数组.也就是说,它们会在内存中占据相同的空间.
显而易见的解决方案是使用指针.所以,我像这样声明了array2:
int (*array2)[2][2];
array2 = &array1;
Run Code Online (Sandbox Code Playgroud)
这似乎有效.现在,这是抓住了.我试图从array1中减去11,但是通过引用array2来实现.这是我想要完成的代码:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
// Trying to do the equivalent of this:
array1[i][j] -= 11;
}
}
Run Code Online (Sandbox Code Playgroud)
我在内部for循环的主体中尝试了以下内容,但都没有成功:
// Second row not affected
*(array2[i][j]) -= 11;
// Second row not affected
*(*(array2[i]) + j) -= 11;
// incompatible types in assignment of `int' to `int[2]'
*( *(array2 …
Run Code Online (Sandbox Code Playgroud)