web-dev-qa-db-ja.com

GoogleNetHTTPTransportを試行すると「JKSが見つかりません」

私は、Google Authorizationでいくつかの問題を抱えていて、これまで「Google資格情報に関連する」プロセスで作業したことがありません。

私の問題は、認証情報リーダーを作成した後(つまり、Googleの認証情報のJSONファイルに正しくアクセスできたと想定しています)、GoogleNetHTTPTransportから新しいTrusted Transportをインスタンス化する行で発生します。そこで、例外エラーがスローされます。

W/System.err: Java.security.KeyStoreException: JKS not found
    at Java.security.KeyStore.getInstance(KeyStore.Java:649)
    at com.google.api.client.util.SecurityUtils.getJavaKeyStore(SecurityUtils.Java:53)
    at com.google.api.client.googleapis.GoogleUtils.getCertificateTrustStore(GoogleUtils.Java:74)
    at com.google.api.client.googleapis.javanet.GoogleNetHttpTransport.newTrustedTransport(GoogleNetHttpTransport.Java:55)
    at com.example.juans.hasapp.getDataFromSheet.authorize(getDataFromSheet.Java:70)

私は調査してきましたが、これらのトランスポートがどのように機能するか、またはKeyStoreがこのプロセスに関与している理由について、きちんとした明確な説明はまだ見つかりませんでした。

私のコードは、現在アクセスしようとしているGoogleスプレッドシートからデータをフェッチするために使用しているAsyncTaskの一部です。ここで私はあなたに任せますauthorize()Credentialを取得してSheetsServiceに渡すメソッド。

private Credential authorize(Context context) {
    Resources resources = context.getResources();
    InputStream jsonInput = resources.openRawResource(R.raw.credential_info);
    Reader credentialReader = null;
    try {
        credentialReader = new InputStreamReader(jsonInput);
        Log.v("GoogleAut", "credential reader created");
    } catch (NullPointerException n){
        Log.v("ERROR GoogleAut", "filePath came out empty, no info provided");
    }

    GoogleClientSecrets clientSecrets = null;
    try {
        clientSecrets = GoogleClientSecrets
                .load(JacksonFactory.getDefaultInstance(),credentialReader);
    } catch (IOException e) {
        e.printStackTrace();
        Log.v("ERROR GoogleAut","IOException error occurred");
    }

    List<String> scopes = Arrays.asList(SheetsScopes.SPREADSHEETS);

    GoogleAuthorizationCodeFlow flow = null;
    try {
        flow = new GoogleAuthorizationCodeFlow
                .Builder(GoogleNetHttpTransport.newTrustedTransport()
                , JacksonFactory.getDefaultInstance()
                ,clientSecrets
                ,scopes)
                .setDataStoreFactory(new MemoryDataStoreFactory())
                .setAccessType("offline")
                .build();
    } catch (IOException e) {
        e.printStackTrace();
        Log.v("ERROR GoogleAut","IOException error occurred");
    } catch (GeneralSecurityException e) {
        e.printStackTrace();
        Log.v("ERROR GoogleAut","GeneralSecurityException error occurred");
    }

    try {
        return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver())
                .authorize("user");
    } catch (Exception e) {
        e.printStackTrace();
        Log.v("ERROR GoogleAut", "Unidentified error");
    }
    return null;
}

おかげで、私はGoogleの開発から始めたばかりであり、そのすべての可能性について学ぶことに非常に興味があります。また、コーディングについての提案も受け付けています。

11
Juanse Hevia

これが私がこの問題を解決するのを助けた答えです https://stackoverflow.com/a/39249969/885329 あなたは置き換える必要があります

HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

HTTP_TRANSPORT = new com.google.api.client.http.javanet.NetHttpTransport()
15