在将代码和测试迁移到AndroidX之后,所有功能似乎都运行良好,但是由于NoClassDefFoundError:androidx / fragment / testing / R $ style异常,两个片段的Robolectric junit测试失败。堆栈跟踪:
java.lang.NoClassDefFoundError:androidx / fragment / testing / R $ style在androidx.fragment.app.testing.FragmentScenario $ EmptyFragmentActivity.onCreate(FragmentScenario.java:79)在android.app.Activity.performCreate(Activity.java:5933 )在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)在androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:674)在org.robolectric.android.controller.ActivityController.lambda $ create $ 0(ActivateController。 .java:69),位于org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:365),位于org.robolectric.android.controller.ActivityController.create(ActivityController.java:69),位于org.robolectric.android.controller。位于org.robolectric.android的ActivityController.create(ActivityController.java:74)。在androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:207)处的internal.LocalActivityInvoker.startActivity(LocalActivityInvoker.java:39)在androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:283)处在androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:265)
为了测试片段,我正在使用FragmentScenario,似乎FragmentScenario.EmptyFragmentActivity指向包androidx.fragment.testing.R中缺少的R类:
setTheme(getIntent()。getIntExtra(THEME_EXTRAS_BUNDLE_KEY,R.style.FragmentScenarioEmptyFragmentActivityTheme));;
知道有什么问题吗?也许我错过了一个对我来说并不那么明显的依赖。
可在以下项目中重现:https : //github.com/marcinbak/androidx-test-error
还报告在Google的问题跟踪器中:https : //issuetracker.google.com/issues/122321150
我必须从JNI调用Java方法.这个Java方法返回int数组(int [] simpleMethod()).如何从JNI调用此方法将数组作为返回值?当方法返回void/String/int/etc但是找不到任何数组时,我知道如何做到这一点.我有一些想法如何解决这个问题,但也许有简单的答案.
我有以下架构:
由于后台线程,Firebase Admin SDK无法与GAE一起使用,因此我决定使用Firebase REST API.当我更新Firebase数据库或从特定路径获取某些内容时,一切顺利,但当我想过滤数据时遇到问题.
在提出cUrl请求时,一切都很好:
curl -X GET \
-H 'Authorization: Bearer auth_token' \
'https://my_project.firebaseio.com/items.json?orderBy="$value"&equalTo="some_string"'
Run Code Online (Sandbox Code Playgroud)
但是当我在GAE应用程序中使用来自Java代码的HttpURLConnection或URLFetchService执行完全相同的请求时,我收到了奇怪的错误.起初那些是urlencoding错误,所以我不得不改变我的网址:
https://my_project.firebaseio.com/items.json?orderBy=%22%24value%22&equalTo=%22some_string%22
但即使在那之后我收到400个错误代码,并带有以下消息:
{"error":"必须在定义其他查询参数时定义orderBy"}
我的请求代码如下所示:
URL url = URL(urlString);
HTTPRequest request = HTTPRequest(url, HTTPMethod.GET, opts)
request.addHeader(HTTPHeader(AUTH_HEADER, "Bearer " + accessToken));
HTTPResponse responseRaw = service.fetch(request);
Run Code Online (Sandbox Code Playgroud)
我尝试使用不同的值作为urlString(简单地将字符串赋值给变量)到无vail:
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=%22%24value%22&equalTo=%22some_string%22";
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=%22$value%22&equalTo=%22some_string%22";
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=\"$value\"&equalTo=\"some_string\"";
Run Code Online (Sandbox Code Playgroud)
第三个值导致异常,并且未发送任何请求.什么更多删除equalTo参数使请求工作,我得到200和json响应:
String urlString = "https://my_project.firebaseio.com/items.json?orderBy=%22$value%22";
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
java rest google-app-engine firebase firebase-realtime-database
我有一个在离线模式下(通过调用FirebaseDatabase.getInstance().setPersistenceEnabled(true))使用Firebase数据库的应用。在数据库中,只有当其他节点的值设置为true时,用户才能访问该节点,规则如下所示:
{
"rules": {
".write": "auth != null",
".read": "false",
"mynode": {
"$dataId": {
".read": "auth != null && root.child('userAccessNode/' + auth.uid + '/' + $dataId).val() == true"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
设备连接到互联网时,它可以正常工作。但是,当我在设备上打开飞行模式时,回调addValueEventListener(ValueEventListener)不会返回任何内容-错误也没有价值,只是挂起,直到我再次打开互联网连接为止。
我确保在脱机之前都已检索到两个节点,所以我确定所讨论的节点和保存访问信息的节点都已缓存。
对于具有简单规则(例如(auth!= null))的其他节点,脱机模式可以正常工作,但在这种情况下不可行。
我做错什么了吗?你知道我该怎么做吗?脱机时(取决于其他节点的)规则评估如何工作?
我在我的项目中使用org.jetbrains.kotlin:kotlin-reflect库(包含在gradle依赖项中).
该应用程序一直没有任何问题,但在将android gradle插件升级到最新版本3.1.0之后,应用程序开始在一台设备上崩溃(Nexus 5,Android 4.4.3).日志如下:
E/AndroidRuntime:FATAL EXCEPTION:kotlin.jvm.KotlinReflectionNotSupportedError:在运行时找不到Kotlin反射实现.确保你在kotlin.jvm.internal.ClassReference.error(ClassReference.kt:86)的类路径中有kotlin-reflect.jar,位于kotlin.jvm.internal.ClassReference.getSimpleName(ClassReference.kt:23)
我认为这不是预期的行为,但也许有人找到了解决方法/解决方案?
现在我被迫将android gradle插件降级到3.0.1以防止应用程序崩溃.
====================
我试图重新创建导致崩溃的环境,但是我没有设法重现崩溃.因为这只发生在较旧的Android版本(pre-L)上,并且在升级引入一些dex优化的android gradle插件之后,我的猜测是它在某种程度上相关.
====================
对于将此问题标记为重复的人:
我不确定是否可以更清楚:其他票证是否缺少依赖性.我在build.gradle中有kotlin反映依赖.此外,我的应用程序适用于较高的Android版本以及将android gradle插件降级到3.0.1之后.如果缺少依赖项,则无法使用任何版本的android gradle插件.因此,其他问题的答案对此无效.