我正在尝试在我的Android应用中添加来自gmail帐户功能的导入联系人。所以第一个问题是从gmail获取访问令牌。我发现有GoogleAuthUtil
课可以帮助我。
这是我的代码:
private void importContactsFromGmail() {
showProgressDialog();
GetTokenTask getTokenTask = new GetTokenTask();
getTokenTask.execute();
String token = "";
try {
token = getTokenTask.get();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(token);
hideProgressDialog();
}
private class GetTokenTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
String token = "";
try {
token = GoogleAuthUtil.getToken(activity, <My_gmail_account>, "https://www.google.com/m8/feeds/");
} catch (Exception e) {
e.printStackTrace();
}
return token;
}
}
现在调用GoogleAuthUtil.getToken
之后,我的应用程序完全冻结(Logcat中没有错误)。我完全陷入困境,我需要你的帮助。
我的代码出了什么问题?也许我应该以其他方式导入联系人?
答案 0 :(得分:1)
不确定这是否相关但是在主线程上调用.get()
方法不正确,因为是阻塞方法。
如果以这种方式使用AsyncTask
该怎么办?
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new GetTokenTask().execute();
}
static class GetTokenTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... unused) {
String token = "";
try {
token = GoogleAuthUtil.getToken(activity, <My_gmail_account>, "https://www.google.com/m8/feeds/");
} catch (Exception e) {
e.printStackTrace();
}
return token;
}
@Override
protected void onPostExecute(String token) {
Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
}
}
}
(我写的没有编译,也许需要调整)
答案 1 :(得分:0)
在Android设备上,Gmail联系人会在本地同步到设备上,并通过公开Contacts Provider提供,因此您无需使用Google API来提取已有的内容。整个training series专门用于检索联系人列表。
请注意,联系人培训系列确实假设您已经了解内容提供商,因此阅读the basics of Content Providers也可能会有所帮助。