连接到 Google 电子表格
Connecting to Google Spreadsheet
我正在尝试根据 https://developers.google.com/sheets/api/quickstart/java 通过 java 连接到 google 电子表格。
如果我在 IDE 上执行此示例,它可以正常工作。
现在我想将此示例集成到我的 android 应用程序中。第一个activity直接调用了前面link的main-method(代码在link的step3中。main方法已经改名了,为了让activity调用=]).但是我收到一个错误:
W/System.err: java.io.IOException: unable to create directory: /tokens
W/System.err: at com.google.api.client.util.store.FileDataStoreFactory.<init>(FileDataStoreFactory.java:61)
W/System.err: at com.kazumi.management.ConnectToDatabase.getCredentials(ConnectToDatabase.java:70)
根据报错,应该是这一行:
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.build();
所以原因是,此功能无法在我的虚拟 android 设备上创建目录。但是为什么会这样呢?是否存在解决方法?
所以我自己找到了解决方案。在 android (https://developer.android.com/guide/topics/data/data-storage)
上难以访问内部和外部存储
所以为了在我的内部存储上创建一个目录,我需要使用这个:
File folder = getDir("theFolder",Context.MODE_PRIVATE);
我正在尝试根据 https://developers.google.com/sheets/api/quickstart/java 通过 java 连接到 google 电子表格。
如果我在 IDE 上执行此示例,它可以正常工作。 现在我想将此示例集成到我的 android 应用程序中。第一个activity直接调用了前面link的main-method(代码在link的step3中。main方法已经改名了,为了让activity调用=]).但是我收到一个错误:
W/System.err: java.io.IOException: unable to create directory: /tokens
W/System.err: at com.google.api.client.util.store.FileDataStoreFactory.<init>(FileDataStoreFactory.java:61)
W/System.err: at com.kazumi.management.ConnectToDatabase.getCredentials(ConnectToDatabase.java:70)
根据报错,应该是这一行:
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.build();
所以原因是,此功能无法在我的虚拟 android 设备上创建目录。但是为什么会这样呢?是否存在解决方法?
所以我自己找到了解决方案。在 android (https://developer.android.com/guide/topics/data/data-storage)
上难以访问内部和外部存储所以为了在我的内部存储上创建一个目录,我需要使用这个:
File folder = getDir("theFolder",Context.MODE_PRIVATE);