我有一个安卓应用,应该使用谷歌融合表。我正在使用谷歌服务帐户,并且必须获取我的 xxxxxxxxxxxprivatekey.p12 的路径。
public class CredentialProvider {
...
private static String PRIVATE_KEY = "xxxxxxxxxxxprivatekey.p12";
...
public static GoogleCredential getCredential() throws IOException, GeneralSecurityException {
return getCredential(Arrays.asList(SCOPES), SERVICE_ACCOUNT_EMAIL, new File(PRIVATE_KEY), HTTP_TRANSPORT, JSON_FACTORY);
}
...
}
代码想要从PRIVATE_KEY
路径中创建一个新文件。我尝试了各种路径,但每次我得到一个FileNotFoundException
and open failed: ENOENT (No such file or directory)
。
我已经阅读了一些关于 assets 文件夹的内容,但我不知道如何使用 getCredential 方法来完成这项工作。
- 我必须将我的私钥放在我的android项目中
- PRIVATE_KEY 路径的外观如何?
- 我如何获得“新文件(PRIVATE_KEY)”的工作?
谢谢 ;)
编辑:
现在我在你的链接GoogleCredential.Builder
中创建我自己setServiceAccountPrivateKeyFromP12File(InputStream p12File)
的,它似乎工作正常。但是 ingetCredential()
refreshToken()
被调用并在NetworkOnMainThreadException中崩溃。我读过,我应该使用 AsyncTask。你能给我一个提示,我必须把那个 AsyncTask 放在哪里,里面应该有doInBackground()
什么,里面有什么onPostExecute()
或任何方法?
这是 的代码getCredential()
。refreshToken()
它与NetworkOnMainThreadException一起崩溃:
public static GoogleCredential getCredential(List<String> SCOPE, String SERVICE_ACCOUNT_EMAIL,
InputStream inputStreamFromP12File, HttpTransport HTTP_TRANSPORT, JsonFactory JSON_FACTORY)
throws IOException, GeneralSecurityException {
// Build service account credential.
MyGoogleCredentialBuilder builder = new MyGoogleCredentialBuilder();
builder.setTransport(HTTP_TRANSPORT);
builder.setJsonFactory(JSON_FACTORY);
builder.setServiceAccountId(SERVICE_ACCOUNT_EMAIL);
builder.setServiceAccountScopes(SCOPE);
builder.setServiceAccountPrivateKeyFromP12File(inputStreamFromP12File);
GoogleCredential credential = builder.build();
credential.refreshToken();
return credential;
}
EDIT2: 最后,我以这种方式解决了它:
private static class RefreshTokenTask extends AsyncTask<GoogleCredential, Void, Void> {
@Override
protected Void doInBackground(GoogleCredential... params) {
try {
params[0].refreshToken();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
在我的 getCredential 方法中:
new RefreshTokenTask().execute(credential);