Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用我的服务对象连接到我的google端点_Java_Android_Google Cloud Endpoints_Google Client_Service Object - Fatal编程技术网

Java 无法使用我的服务对象连接到我的google端点

Java 无法使用我的服务对象连接到我的google端点,java,android,google-cloud-endpoints,google-client,service-object,Java,Android,Google Cloud Endpoints,Google Client,Service Object,我已经从我的端点生成了我的客户端库,并且为我的已验证调用向端点传递了适当的凭据(客户端ID是100%正确的) 但我在运行代码时仍会遇到此错误: com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCreden

我已经从我的端点生成了我的客户端库,并且为我的已验证调用向端点传递了适当的凭据(客户端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);
       }
   }
这是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()
之前,需要在生成器中设置应用程序包名称:

此外,如果这是一个经过身份验证的呼叫,您必须通过帐户选择器运行用户以选择一个Google帐户,并在凭据中设置该帐户:

String accountName = ...;  //  Pull from where ever you are storing it
credential.setSelectedAccountName(accountName);
此外,从提供的代码中看,客户ID对受众(范围)的作用并不明显,因此请确保其格式为:

static final String CLIENT_ID = "server:client_id:" + YOUR_WEB_APP_CLIENT_ID;
由于您使用的是云端点生成的库,因此不必设置根URL或使用原始HTTP请求/响应。端点生成的库已经在为您执行HTTP请求准备和HTTP响应JSON解析。在没有看到您的云API的情况下,我猜您的“category”云方法会返回一个建模为
category
的东西,它有一个成员字段
detail
,可以使用getter
getDetail()检索该字段:


我只是那样做了。。它仍然给了我同样的错误好吧,我意识到还有一些其他的事情需要注意,看看我刚才对答案所做的编辑。我已经相应地调整了代码,但没有收到另一个错误。。检查我的问题。。我根据自己的观点编辑了我的问题,我只是用自己的观点尝试了一下,但仍然给出了同样的错误。。然后我发现是SHA1指纹错了。。。所以我把它改成了正确的。它终于收到了一张代币。。。。。所以我现在想在真正的交易中尝试一下……非常感谢。添加builder.setApplicationName(getActivity().getPackageName());将我的客户端id从android更改为web,这里是静态的最终字符串client\u id=“server:client\u id:”+您的web\u应用程序\u client\u id;为我工作。你能解释一下为什么它使用的是web客户端id而不是android吗。它应该和android一起工作,对吗?
String accountName = ...;  //  Pull from where ever you are storing it
credential.setSelectedAccountName(accountName);
static final String CLIENT_ID = "server:client_id:" + YOUR_WEB_APP_CLIENT_ID;
builder.setApplicationName(getActivity().getPackageName());
credential.setSelectedAccountName(accountName);
service = builder.build();
Core.Info.Category endpoint = service.info().category("en");
String category = endpoint.execute().getDetail();