gpt4 book ai didi

java - 无法使用我的服务对象连接到我的谷歌端点

转载 作者:行者123 更新时间:2023-11-29 05:08:35 25 4
gpt4 key购买 nike

我已经从我的端点生成了我的客户端库,并且还为我对端点的身份验证调用传递了适当的凭据(客户端 ID 100% 正确)。

但是当我运行我的代码时仍然出现这个错误:

com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException
at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:286)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859)
at com.projects.malaysiakini.Home$ContentApi.doInBackground(Home.java:165)
at com.projects.malaysiakini.Home$ContentApi.doInBackground(Home.java:141)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: com.google.android.gms.auth.GoogleAuthException: Unknown
at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:255)
at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:279)
            at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859)
            at com.projects.malaysiakini.Home$ContentApi.doInBackground(Home.java:165)
            at com.projects.malaysiakini.Home$ContentApi.doInBackground(Home.java:141)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)

下面是我的代码:

 private class ContentApi extends AsyncTask<Void,Void,String>{

@Override
protected String doInBackground(Void... params) {
String response = null;


try {
settings = getActivity().getSharedPreferences("MApi", Context.MODE_PRIVATE);
credential = GoogleAccountCredential.usingAudience(getActivity(), CLIENT_ID);
setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));

Core.Builder builder = new Core.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), credential);
builder.setApplicationName(getActivity().getPackageName());

service = builder.build();



if (credential.getSelectedAccountName() != null) {
// Already signed in, begin app!

response = service.info().execute().getLang();
}//end if
else {
chooseAccount();
}

}//end try
catch(IOException ex){
Log.d("MkiniCore", ex.getMessage(), ex);
}//end catch



return response;
}//end doInBackground

@Override
protected void onPostExecute(String s) {
textView.setText(s);
}
}

我刚刚将代码编辑为下面的答案,但仍然出现此错误

这是帐户选择器的代码:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {
case REQUEST_ACCOUNT_PICKER:
if (data != null && data.getExtras() != null) {
String accountName =
data.getExtras().getString(
AccountManager.KEY_ACCOUNT_NAME);
if (accountName != null) {
setSelectedAccountName(accountName);
SharedPreferences.Editor editor = settings.edit();
editor.putString(PREF_ACCOUNT_NAME, accountName);
editor.commit();
// User is authorized.
}
}
break;
}
}

这是 setSelectedAccountName 方法

private void setSelectedAccountName(String accountName){
SharedPreferences.Editor editor = settings.edit();
editor.putString(PREF_ACCOUNT_NAME, accountName);
editor.commit();
credential.setSelectedAccountName(accountName);
this.accountName = accountName;
}//end setSelectedAccountName

最佳答案

调用.build()前需要在builder中设置应用包名:

builder.setApplicationName(getActivity().getPackageName());

另外,如果这是一个经过身份验证的调用,您将不得不让用户通过帐户选择器选择一个 Google 帐户,并在凭据中进行设置:

String accountName = ...;  //  Pull from where ever you are storing it
credential.setSelectedAccountName(accountName);

此外,从所提供的代码中,CLIENT_ID 对受众(范围)的作用并不明显,因此请确保其格式如下:

static final String CLIENT_ID = "server:client_id:" + YOUR_WEB_APP_CLIENT_ID;

由于您使用的是云端点生成的库,因此您不必设置根 URL 或使用原始 HTTP 请求/响应。端点生成的库已经在为您进行 HTTP 请求准备和 HTTP 响应 JSON 解析。没有看到您的云 API,我在这里猜测您的“类别”云方法返回建模为 Category 的内容,其中有一个成员字段 detail,可以使用 setter/getter getDetail():

builder.setApplicationName(getActivity().getPackageName());
credential.setSelectedAccountName(accountName);
service = builder.build();
Core.Info.Category endpoint = service.info().category("en");
String category = endpoint.execute().getDetail();

关于java - 无法使用我的服务对象连接到我的谷歌端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29544723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com