Android 安卓:使用AcountManager访问谷歌文档

Android 安卓:使用AcountManager访问谷歌文档,android,google-docs,google-docs-api,Android,Google Docs,Google Docs Api,嗨,我正在做一个项目,它必须访问谷歌文档。作为一个例子,我从 目前我得到“401无法解析AuthSub令牌” 我调查过: 据我所知,android返回了错误类型的访问令牌。如果有任何方法可以使用AccountManager为android创建有效的访问令牌,或者我需要使用其他身份验证方法 import com.google.api.client.googleapis.extensions.android.accounts.GoogleAccountManager; import com.g

嗨,我正在做一个项目,它必须访问谷歌文档。作为一个例子,我从 目前我得到“401无法解析AuthSub令牌” 我调查过:

据我所知,android返回了错误类型的访问令牌。如果有任何方法可以使用AccountManager为android创建有效的访问令牌,或者我需要使用其他身份验证方法

import com.google.api.client.googleapis.extensions.android.accounts.GoogleAccountManager;
import com.google.api.services.docs.DocsClient;
import com.google.api.services.docs.DocsUrl;
import com.google.api.services.docs.model.DocumentListEntry;
import com.google.api.services.docs.model.DocumentListFeed;

public class Main extends ListActivity{
    private static final String AUTH_TOKEN_TYPE = "writely";
    private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
    protected DocsClient client;
    String accountName;


    GoogleAccountManager accountManager;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        client = new DocsClient(HTTP_TRANSPORT.createRequestFactory(credential));
        accountManager = new GoogleAccountManager(this);
        gotAccount();
    }

    void gotAccount() {

        accountManager.getAccountManager().getAuthToken(account, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>() {

          public void run(AccountManagerFuture<Bundle> future) {
            try {
              Bundle bundle = future.getResult();
              if (bundle.containsKey(AccountManager.KEY_INTENT)) {
                Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT);
                intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivityForResult(intent, REQUEST_AUTHENTICATE);
              } else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
                setAuthToken(bundle.getString(AccountManager.KEY_AUTHTOKEN));
                onAuthToken();
              }
            } catch (Exception e) {
              Log.e(TAG, e.getMessage(), e);
            }
          }
        }, null);
  }

void setAuthToken(String authToken) {
    credential.setAccessToken(authToken);
  }

 void onAuthToken() {
    List<String> result = new ArrayList<String>();
    DocumentListFeed feed = client.executeGetDocumentListFeed(DocsUrl.forDefaultPrivateFull());
    for (DocumentListEntry doc : feed.docs) {
            result.add(doc.title);
          }
    //DO something with list
  }
}
import com.google.api.client.googleapis.extensions.android.accounts.GoogleAccountManager;
导入com.google.api.services.docs.DocsClient;
导入com.google.api.services.docs.DocsUrl;
导入com.google.api.services.docs.model.DocumentListEntry;
导入com.google.api.services.docs.model.DocumentListFeed;
公共类主活动{
私有静态最终字符串AUTH_TOKEN_TYPE=“writely”;
私有静态最终HttpTransport HTTP_TRANSPORT=new NetHttpTransport();
受保护的DocsClient客户端;
字符串accountName;
谷歌会计经理;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
client=newdocsclient(HTTP_TRANSPORT.createRequestFactory(凭证));
accountManager=新的GoogleAccountManager(此);
gotcount();
}
作废帐户(){
accountManager.getAccountManager().getAuthToken(帐户,身份验证令牌类型,true,新AccountManagerCallback(){
公共作废运行(AccountManagerFuture){
试一试{
Bundle=future.getResult();
if(bundle.containsKey(AccountManager.KEY_INTENT)){
Intent Intent=bundle.getParcelable(AccountManager.KEY\u Intent);
setFlags(intent.getFlags()&~intent.FLAG\u活动\u新任务);
startActivityForResult(意图、请求和验证);
}else if(bundle.containsKey(AccountManager.KEY\u AUTHTOKEN)){
setAuthToken(bundle.getString(AccountManager.KEY_AUTHTOKEN));
onAuthToken();
}
}捕获(例外e){
Log.e(标记,e.getMessage(),e);
}
}
},空);
}
void setAuthToken(字符串authToken){
credential.setAccessToken(authToken);
}
void onAuthToken(){
列表结果=新建ArrayList();
DocumentListFeed=client.executeGetDocumentListFeed(DocsUrl.forDefaultPrivateFull());
for(DocumentListEntry文档:feed.docs){
结果.添加(单据标题);
}
//用列表做些什么
}
}

我成功地完成了这项任务。不得不切换到谷歌api客户端的1.7版本并使用

com.google.api.client.googleapis.auth.clientlogin.clientlogin.Response

而不是


com.google.api.client.googleapis.auth.oauth2.GoogleCredential
我成功地实现了这个任务。不得不切换到谷歌api客户端的1.7版本并使用

com.google.api.client.googleapis.auth.clientlogin.clientlogin.Response

而不是


com.google.api.client.googleapis.auth.oauth2.GoogleCredential

请向我们展示您实际使用的代码(当然要去掉凭据),而不仅仅是您遵循的教程,然后指向出现错误的确切行。我已经编辑了我的帖子,其中包含了代码。请向我们展示您实际使用的代码(当然没有资格证书),不仅仅是你遵循的教程,然后指向错误所在的那一行。我已经编辑了我的帖子,在那里包含了代码。