我正在尝试检索Google用户的联系人列表。 这个getContacts()在AsyncTask的doInBackground()中调用。 在这一点上,我已经收到了一个令牌。 我将自己建立在这个codeLab示例上:https://codelabs.developers.google.com/codelabs/appauth-android-codelab/#0
我正在修改本教程的第10点,因此尝试获取用户的联系人列表而不是用户的个人信息(<正在运行)
private List<ContactEntry> getContacts() {
ContactsService contactsService = new ContactsService("MY_PRODUCT_NAME");
contactsService.setHeader("Authorization", "Bearer " + token);
try {
URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
Query myQuery = new Query(feedUrl);
ContactFeed resultFeed = contactsService.query(myQuery, ContactFeed.class);
List<ContactEntry> contactEntries = resultFeed.getEntries();
return contactEntries;
} catch (Exception e) {
}
return null;
}
我的问题是我总是收到此消息的异常:
java.lang.NullPointerException: No authentication header information
有任何帮助吗? 提前谢谢
答案 0 :(得分:0)
你有没有尝试过这个解决方案?
How to get gmail user's contacts?
此外,您是否已将您需要的所有权限放入Manifest? 你是否在开发者控制台中正确定义了你的sha1?
答案 1 :(得分:0)
您可以参考此related thead。尝试修改客户端库的用户 代理人:
解决方法是在创建客户端后更改其用户代理:
ContactsService service = new ContactsService(applicationName); service.getRequestFactory().setHeader("User-Agent", applicationName);
同样基于此post,service.setOAuth2Credentials()
内部不会像Google协作平台,Google云端硬盘等中的其他服务一样刷新令牌。如果您构建Google凭据,只需在此之后添加此行建立Google凭据:googleCredential.refreshToken();
。