小编Kar*_*ing的帖子

从Intent.ACTION_PICK返回的URI中获取特定的联系信息

我正在编写一个Android应用程序,其数据类型代表一个人(特别是孩子的父母或监护人).我希望能够从Android设备的"联系人"数据库​​中"导入"相关数据字段.(这应该是可选的;也就是说,不要求父/监护人已经在联系人数据库中,如果他们添加新的父母/监护人,也不会更新联系人数据库.)

到目前为止,我已经编写了代码来启动一个新的Intent来选择特定的Contact(使用Intent.ACTION_PICK).然后,我获得一个表示数据库中特定联系人的URI.

不幸的是,我不知道下一步是什么.看起来这应该是世界上最简单的事情,但显然不是.我已经阅读了Android开发者网站上的文档,并查看了多本Android手册.没有快乐.

我想得到的具体信息是:

  1. 联系人的姓名(如果可能的话,首先和最后一个)

  2. 联系人(主要)电子邮件地址

  3. 联系人的手机号码

我想通过查询使用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

15
推荐指数
2
解决办法
2万
查看次数

finish()和Activity生命周期

我正在学习一门课程的Android编程,我有一个关于finish()如何适应Activity生命周期的快速问题.

当你调用finish()时,会启动什么生命周期回调?我认为它是onPause(),然后是onStop()和onDestroy().它是否正确?

真的,我只是想确保它不会直接跳到o​​nDestroy().

android activity-lifecycle android-activity

10
推荐指数
2
解决办法
3万
查看次数

编译器级别的C++引用和指针

我正在努力学习C++编译器如何处理引用和指针,以便为下一学期的编译器类做准备.我对编译器如何处理C++中的引用特别感兴趣.

该标准指定引用是"别名",但我不确切地知道它在编译器级别的含义.我有两个理论:

  1. 非引用变量在符号表中有一个条目.当创建对该变量的引用时,编译器只是创建另一个词汇,该词汇"指向"符号表中的完全相同的条目(而不是内存中的非引用变量的位置).

  2. 当创建对该变量的引用时,编译器会在内存中创建指向该变量位置的指针.解析语言的上下文时会处理对引用的限制(无空值等).换句话说,引用是解除引用指针的"语法糖".

据我所知,这两种解决方案都会产生"别名".编译器是使用一个而不是另一个?还是依赖于编译器?

顺便说一句,我知道在机器语言级别,两者都是"指针"(除了整数之外的所有东西都是机器级别的"指针").我对生成机器代码之前编译器的作用感兴趣.

编辑:我很好奇的部分原因是因为PHP使用方法#1,我想知道C++编译器是否以相同的方式工作.Java肯定不使用方法#1,它们的"引用"实际上是解引用的指针; 请参阅Scott Stanchfield 撰写的这篇文章.

c++ compiler-construction pointers reference

8
推荐指数
2
解决办法
1281
查看次数

C++:获取传递给函数的多维数组的行大小

我正在尝试编写一个打印出多维数组内容的函数.我知道列的大小,但不知道行的大​​小.

编辑:因为我没有说清楚,传递给这个函数的数组不是动态分配的.这些大小在编译时是已知的.

我正在使用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)

c++ sizeof multidimensional-array

7
推荐指数
1
解决办法
3万
查看次数

可以按优先级指定Eclipse任务标记颜色吗?

这是专门针对的Eclipse IDE.我知道可以通过以下方式编辑任务标签的color(和font等):

Preferences->Java->Editor->Syntax Coloring->Comments->Task Tags
Run Code Online (Sandbox Code Playgroud)

但我想做的是为不同的任务标签优先级定义不同的颜色.例如,TODO是普通优先级,因此应该是蓝色; 虽然FIXME是高优先级,所以应该是红色的.

这可能吗?如果是这样,怎么样?

编辑:这是在Java编辑器本身.

java eclipse

6
推荐指数
1
解决办法
1179
查看次数

C++:使一个矩阵指向另一个矩阵

所有.我的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)

c++ pointers multidimensional-array

2
推荐指数
1
解决办法
367
查看次数