0

我正在尝试从我的 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 中没有错误)。我完全卡住了,我需要你的帮助。
我的代码有什么问题?也许我应该以其他方式导入联系人?

4

2 回答 2

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();
        }
    }

}

(我没有编译就写了,可能需要调整一下)

于 2013-05-04T16:19:09.310 回答
0

在 Android 设备上,Gmail 联系人在本地同步到设备上,并且可以通过公共Contacts Provider获得,因此您没有理由需要使用 Google API 来提取已经可用的内容。有一整套专门用于检索联系人列表的培训系列。

请注意,Contacts 培训系列假设您已经了解 Content Providers,因此阅读Content Providers 的基础知识也可能会有所帮助。

于 2013-05-04T14:07:55.263 回答