- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用适用于 Android 和 Groovy 的 GoogleDriveApi 从 Android 访问 Google Drive 帐户内容。但是我在 logcat 中收到一个关于 DriveApi 类的 ClassCastException 的奇怪错误,尽管我遵循了 Google 官方教程,但使用的是 Groovy 语言。 (为了简化问题,我创建了一个小项目,它重现了与原始项目中相同的错误。)
这是构建 gradle(该项目是从命令行生成的:有一个唯一的 gradle.build 文件。提交此 gradle 构建是我以简单的方式为您提供依赖项的一种方式)
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.10'
}
}
apply plugin: 'android'
apply plugin: 'groovyx.grooid.groovy-android'
android {
compileSdkVersion 'Google Inc.:Google APIs:23'
buildToolsVersion '23.0.2'
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
}
buildTypes {
release {
minifyEnabled false
proguardFile getDefaultProguardFile('proguard-android.txt')
}
}
}
repositories {
jcenter()
}
project.androidGroovy {
options {
sourceCompatibility = '1.7'
targetCompatibility = '1.7'
}
}
dependencies {
compile 'org.codehaus.groovy:groovy:2.4.6:grooid'
compile 'com.arasthel:swissknife:1.4.0'
compile 'com.google.android.gms:play-services-drive:8.4.0'
}
这是 GoogleApiGroovyTest.groovy
package com.loloof64.android.google_api_test
import android.app.Activity
import android.os.Bundle
import android.content.IntentSender
import android.widget.Toast
import android.content.Context
import android.util.Log
import groovy.transform.CompileStatic
import com.arasthel.swissknife.dsl.components.GAsyncTask
import com.google.android.gms.common.api.GoogleApiClient
import com.google.android.gms.common.api.GoogleApiClient.Builder
import com.google.android.gms.drive.Drive
import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GooglePlayServicesUtil
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener
import com.google.android.gms.drive.DriveFolder
import com.google.android.gms.drive.DriveApi
import com.google.android.gms.common.api.PendingResult
@CompileStatic
public class GoogleApiGroovyTest extends Activity
implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
{
private GoogleApiClient googleApiClient
private final static int RESOLVE_CONNECTION_REQUEST_CODE = 4
private final static String APP_LOGGER_REF = "GoogleApiGroovyTest"
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
googleApiClient = new GoogleApiClient.Builder(this).addApi(Drive.API).addScope(Drive.SCOPE_APPFOLDER).addConnectionCallbacks(this).addOnConnectionFailedListener(this).build()
googleApiClient.connect()
}
@Override
public void onConnected(Bundle connectionHint){
Toast.makeText(this, "Connected to Google Drive", Toast.LENGTH_SHORT).show()
Context myThis = this
async { context, GAsyncTask task ->
task.after {
Toast.makeText(myThis, "Finally printed items into screen", Toast.LENGTH_SHORT).show()
}
task.error { err ->
Toast.makeText(this, "Error updating list files !", Toast.LENGTH_SHORT).show()
Log.e(APP_LOGGER_REF, err.message)
err.stackTrace.each { element ->
Log.e(APP_LOGGER_REF, element.toString())
}
}
loadExplorerItems()
true // Seem as returning a value is needed for the async task code to be executed
}
}
@Override
public void onConnectionSuspended(int cause) {
//TODO
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
// This block section is mandatory for GoogleApiClient to recover connection failure
if (connectionResult.hasResolution()) {
try {
connectionResult.startResolutionForResult(this, RESOLVE_CONNECTION_REQUEST_CODE)
} catch (IntentSender.SendIntentException e) {
// Unable to resolve
Toast.makeText(this, "Failed to connect to Google account !", Toast.LENGTH_SHORT).show()
}
} else {
GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), this, 0).show()
}
// End of block section
}
private void loadExplorerItems(){
Context myThis = this
DriveFolder appFolder = DriveApi.getAppFolder(googleApiClient)
PendingResult<DriveApi.MetadataBufferResult> pendingChildren = appFolder.listChildren(googleApiClient)
pendingChildren.setResultCallback {DriveApi.MetadataBufferResult result -> processResult:{
if (result.getStatus().isSuccess()){
Toast.makeText(myThis, "Retrieved root content", Toast.LENGTH_SHORT).show()
}
else {
Toast.makeText(myThis, "Failed to get root content", Toast.LENGTH_SHORT).show()
}
}}
}
}
这是错误堆栈跟踪:
04-08 16:58:53.549 3261 3261 E GoogleApiGroovyTest: Cannot cast object 'interface com.google.android.gms.drive.DriveApi' with class 'java.lang.Class' to class 'com.google.android.gms.drive.DriveApi'
04-08 16:58:53.575 3261 3261 E GoogleApiGroovyTest: org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:405)
04-08 16:58:53.575 3261 3261 E GoogleApiGroovyTest: org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:319)
04-08 16:58:53.575 3261 3261 E GoogleApiGroovyTest: org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:232)
04-08 16:58:53.575 3261 3261 E GoogleApiGroovyTest: org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:603)
04-08 16:58:53.575 3261 3261 E GoogleApiGroovyTest: com.loloof64.android.google_api_test.GoogleApiGroovyTest.loadExplorerItems(GoogleApiGroovyTest.groovy:91)
04-08 16:58:53.575 3261 3261 E GoogleApiGroovyTest: com.loloof64.android.google_api_test.GoogleApiGroovyTest.access$0(GoogleApiGroovyTest.groovy)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: com.loloof64.android.google_api_test.GoogleApiGroovyTest$_onConnected_closure1.doCall(GoogleApiGroovyTest.groovy:62)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: java.lang.reflect.Method.invoke(Native Method)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1021)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: groovy.lang.Closure.call(Closure.java:426)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: com.arasthel.swissknife.dsl.components.GAsyncTask.doInBackground(GAsyncTask.groovy:49)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: android.os.AsyncTask$2.call(AsyncTask.java:295)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
04-08 16:58:53.576 3261 3261 E GoogleApiGroovyTest: java.lang.Thread.run(Thread.java:818)
同时,DriveApi.getAppFolder 方法具有以下签名:
abstract DriveFolder getAppFolder(GoogleApiClient apiClient)
DriveApi 类和 DriveFolder 类均不采用类参数。所以我无法理解 Stacktrace 错误的真正含义。
最佳答案
嗯,我也不明白这个错误是从哪里来的,但事实上,您尝试在接口(interface)上调用方法,就像在类上调用静态方法一样,可能需要做一些事情有了它:
DriveFolder appFolder = DriveApi.getAppFolder(googleApiClient)
DriveApi
是一个接口(interface),因此它没有任何方法实现。并且,getAppFolder()
是一个实例方法,而不是静态方法。因此,您需要的是 DriveApi
的实现,您可以从 Drive
获取它:
DriveFolder appFolder = Drive.DriveApi.getAppFolder(googleApiClient)
关于java - 使用 GoogleDriveApi for android 和 Groovy 时出现奇怪的 ClassCastException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502250/
我正在编写一个 mapreduce 应用程序,它接受(键,值)格式的输入并只显示与 reducer 输出相同的数据。 这是示例输入: 1500s 1 1960s 1 Aldus 1 在下面
我不明白,我有一个典型的消息源 content.Language 我可以得到它就像 @Autowire protec
我已经为抽屉导航编写了一个运行良好的程序,但最近我尝试为个人资料图片和 TextView 放置一个 ImageView,之后它给了我一个 ClassCastException。 main_activi
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
@Override public void onPause() { super.onPause(); save(notes.itemSelected); } @Override pub
描述 我正在尝试创建一种自定义语言,我想将词法分析器规则与解析器规则分开。此外,我的目标是将词法分析器和解析器规则进一步划分为特定文件(例如,通用词法分析器规则和关键字规则)。 但我似乎无法让它发挥作
我正在尝试使用以下代码为给定的 Runnable 对象创建代理: public class WorkInvocationHandler implements InvocationHandler {
我有两个非常简单的类,一个扩展了另一个: public class LocationType implements Parcelable { protected int locid =
我遇到了 ClassCastException :Cannot cast my.package.classA to my.package.classA.请注意,(规范)类(名称)是相同的。 我知道这应
我有一个代码试图将一个函数包装在另一个执行动态类型检查的函数中: class Base class Foo extends Base class Bar extends Base object Mai
我使用hadoop 0.18.3遇到以下错误 java.lang.ClassCastException:org.apache.hadoop.io.Text无法转换为org.apache.hadoop.
在 org.dozer.BeanFactory.createBean(Object, Class, String) 的实现中我尝试将对象转换为它的类型。如果我部署所有 bundle ,即关闭并启动所有
我有这个代码: package Maven_test.Maven_project_test; public class Test { class A { int i = 10;
我一直在尝试对 Wicket 的 WebSession 进行子类化,以便可以实现基本的身份验证系统。我已遵循 Wicket 引用库中的指南。当我在网页中尝试以下操作时,出现 ClassCastExce
我正在构建一个 kotlin AAR 库,我需要在发布之前对其进行混淆。我有以下结构: package com.example.token interface TokenManager { s
Kotlin 引入了 here 中描述的声明站点差异. 在某些情况下,泛型参数的 out/in 关键字可能会导致 ClassCastException。我的程序如下所示。 fun main(args:
我正在 AnyLogic 中进行基于代理的传染病流行模拟。我的模型中有两种代理类型 - 人员和建筑物。我正在尝试编写一个函数来计算代理类型“人员”在任何给定时间点所具有的传染性接触数量。下面是我的函数
我有一个 EditContact 类。打开后,它会显示哪些复选框已选中或未选中。这是通过我的适配器中的一些代码完成的,它可以正常工作: //This is for EditContact, t
这个问题已经有答案了: 奥 git _a (2 个回答) 已关闭 5 年前。 我正在获取 ClassCastException 。这两个类来自不同的 jar,但是JettyContinuationPr
我想在 Java 中使用一组对,但是当我调用 contains() 来查看它是否已包含特定对时,我总是会得到 ClassCastException >。有没有办法避免这种行为? 它的实例化如下: pr
我是一名优秀的程序员,十分优秀!