Android调用Google Keep API遇java.lang.IllegalStateException版本兼容问题
Android调用Google Keep API版本不兼容问题
我正在Android项目里尝试调用Google Keep API创建笔记,现在卡在了Keep Builder初始化环节,遇到版本不兼容的错误。
依赖配置
implementation("com.google.firebase:firebase-auth:22.3.1") implementation("com.google.android.gms:play-services-auth:21.1.0") implementation ("com.google.api-client:google-api-client:2.4.0") implementation ("com.google.apis:google-api-services-keep:v1-rev20210528-1.31.0")
待修复代码
public class KeepQuickstart { public static void createNewNote(Context context){ GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(context); if (account != null) { String idToken = account.getIdToken(); GoogleCredentials credentials = GoogleCredentials.create(new AccessToken(idToken, null)); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials); try{ Keep keepService = new Keep.Builder(new NetHttpTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("Ecco6").build(); // Create note content Section noteBody = new Section().setText(new TextContent().setText("Finish preparations by tomorrow!")); Note newNote = new Note().setTitle("Customer call next week").setBody(noteBody); // Create the note try { keepService.notes().create(newNote).execute(); // Handle success, e.g., show a toast message } catch (Exception e) { // Handle creation failure e.printStackTrace(); } }catch (ExceptionInInitializerError e){ System.out.println(e.getCause().toString()); } } else { // User is not signed in, handle this case System.out.println("User not logged in."); } } }
遇到的错误
java.lang.IllegalStateException: You are currently running with version 2.4.0 of google-api-client. You need at least version 1.31.1 of google-api-client to run version 1.31.0 of the Google Keep API library.
我试过多种方式传递HttpRequestInitializer来确保令牌正确并获取用户笔记访问权限,但都没效果,现在被这个版本错误卡着,求解决办法!
解决方案
升级google-api-client版本
错误信息明确指出,1.31.0版本的Google Keep API需要至少1.31.1版本的google-api-client支持。修改依赖配置,将google-api-client版本升级到1.31.1或更高(建议使用兼容的最新稳定版):implementation ("com.google.api-client:google-api-client:1.31.1")升级后同步项目,若出现依赖冲突,可通过
./gradlew dependencies命令排查冲突并排除旧版本依赖。修正令牌获取逻辑
当前代码用account.getIdToken()获取的ID Token并非Google Keep API所需的访问令牌,需调整为获取带权限的OAuth 2.0访问令牌:- Google SignIn时必须请求
KeepScopes.NOTES权限 - 使用
GoogleAuthUtil获取对应权限的访问令牌,替换原ID Token的使用:String accessToken = GoogleAuthUtil.getToken(context, account.getAccount(), "oauth2:" + KeepScopes.NOTES); GoogleCredentials credentials = GoogleCredentials.create(new AccessToken(accessToken, null));
- Google SignIn时必须请求
处理网络请求线程
Android中主线程不能执行网络请求,keepService.notes().create(newNote).execute()是同步请求,需放到子线程执行,或改用异步enqueue方式,避免触发NetworkOnMainThreadException。
内容的提问来源于stack exchange,提问作者Jonelix
相关产品推荐
相关产品推荐

