java - Google 身份验证找不到 .p12 文件

标签 java android google-sheets

我正在尝试制作一个可以编辑我的 Google 电子表格的应用程序。

但是我在身份验证部分遇到一些问题。 现在我的身份验证代码如下所示。

    URL SPREADSHEET_FEED_URL = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");

    File p12 = new File("./Key.p12");

    HttpTransport httpTransport = new NetHttpTransport();
    JacksonFactory jsonFactory = new JacksonFactory();
    String [] SCOPESArray = {"https://spreadsheets.google.com/feeds","https://spreadsheets.google.com/feeds/spreadsheets/private/full"};
    final List SCOPES = Arrays.asList(SCOPESArray);


    GoogleCredential credential = new GoogleCredential.Builder()
                .setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountId("XXXXXXXXXXXXXgserviceaccount.com")
                .setServiceAccountScopes(SCOPES)
                .setServiceAccountPrivateKeyFromP12File(p12)
                .build();

但是当我尝试运行此应用程序时,该应用程序在 Google 凭据生成器上崩溃。这是我收到的错误:

java.io.FileNotFoundException: /./Key: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:409)
at java.io.FileInputStream.<init>(FileInputStream.java:78)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder.setServiceAccountPrivateKeyFromP12File(GoogleCredential.java:670)
at com.example.XXXX.UpdateSpreadsheet.authenticate(UpdateSpreadsheet.java:57)
at com.example.XXXX.UpdateSpreadsheet.doInBackground(UpdateSpreadsheet.java:124)
at com.example.XXXX.UpdateSpreadsheet.doInBackground(UpdateSpreadsheet.java:39)
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: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
    at libcore.io.Posix.open(Native Method)
    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
    at libcore.io.IoBridge.open(IoBridge.java:393)
    ... 11 more

我尝试了不同的 p12 文件路径,但都不起作用。我尝试了“./Key.p12”、“/Key.p12”、“Key.p12”以及文件的完整路径,但这也不起作用。

它说它无法打开它,但我已将它放在项目目录中,如“Projectname/Key.p12”。我不知道我做错了什么,如果有人能帮助我那就太好了。

最佳答案

尝试像这样创建 p12 File 对象:

File p12 = new File(this.getClass().getResource("/Key.p12").toURI());

关于java - Google 身份验证找不到 .p12 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769422/

相关文章:

java定时器任务计划

java - Spring 4 websockets 导致大量异常

java - GSON 中的自定义反序列化?

android - Google Maps Cluster Item Marker - 更新标记图标

google-analytics - Google Sheets FILTER() 和 QUERY() 无法与 SUM() 一起使用

java - Spring Cloud Feign 客户端重复列表值

Android:getApplicationContext() 在 View 子类中不起作用

regex - 使用 REGEX 从数据中提取文本

excel - 在电子表格中计算每周和每月总计

android - RecyclerView 正在切断最后一项