我的日志显示此异常:ArrayIndexOutOfBoundsException: length=0; index=0由以下代码触发:
public static String getInitialsFromFullName(String fullName)
{
String[] splitNames = fullName.split(" ");
String firstName = splitNames[0]; <-- Here
...
}
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚String.split返回一个空数组的条件.我的理解是,如果找不到匹配项,则返回大小为1且包含原始字符串的数组.
这是针对Android构建SDK版本21编译的Java.我期待听到我遗漏的明显细节.
我有一个视图,其中一个元素在无限循环中使用以下动画进行动画处理:
<translate
android:fromXDelta="0%"
android:toXDelta="100%"
android:duration="10000"
android:repeatCount="-1"
android:repeatMode="reverse"/>
Run Code Online (Sandbox Code Playgroud)
当Espresso打开我的活动时,它可以执行一些操作但很快冻结.我想Espresso正在等待UI线程变为空闲,在这种情况下永远不会发生.
是我测试此视图以实现禁用动画的机制的唯一方法吗?我可以有另一个类处理动画,这将被模拟为测试.或者建立时间条件.
编辑:我还没有创建一个示例项目来尝试重新创建该问题,但在此期间还有一些进一步的细节:
1)我正在使用Jake Wharton ActivityRule自动启动我的活动(https://gist.github.com/JakeWharton/1c2f2cadab2ddd97f9fb).
2)这是我的测试:
onView(withId(R.id.btn_yes)).perform(click());
Run Code Online (Sandbox Code Playgroud)
3)这是完整的堆栈跟踪.注意AppNotIdleException:
Running tests
Test running started
android.support.test.espresso.PerformException: Error performing 'single click' on view 'with id: com.myapp:id/btn_yes'.
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83)
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:70)
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:53)
at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:185)
at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115)
at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87)
at com.myapp.espresso.MyActivityTest.yesButtonTest(MyActivityTest.java:53)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at com.myapp.espresso.ActivityRule$2.evaluate(ActivityRule.java:129)
at org.junit.rules.RunRules.evaluate(RunRules.java:18)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at …Run Code Online (Sandbox Code Playgroud) 我CoordinatorLayout正在使用ViewCompat.offsetLeftAndRight和ViewCompact.offsetTopAndBottomAPI 一起使用其中的子视图位置进行动画处理.
当添加或删除子视图时CoordinatorLayout,布局操作将每个子视图的位置重置到屏幕的左上角,即没有任何偏移.
该文章提供了一个解决方案,通过在子视图设置布局听众和恢复老位置.
我注意到使用setTranslationX和setTranslationYAPI,这个问题不会发生.儿童在父母布局事件后保持其位置.
我应如何在这两套API之间做出决定,以便在屏幕上安排我的观点?我很谨慎地使用它们而不理解它们的差异.通过阅读官方文档,我没有得到很好的理解.
我们有一个网络产品和 Android/iOS 移动应用程序,启用了应用程序 (Android) 和通用 (iOS) 链接。这使操作系统能够在各种场景中打开我们的应用程序,否则用户会被导航到我们的移动网络产品。
我们现在面临的问题是我们的应用程序在这种不良情况下打开:
https://www.example.com. 在这种情况下,操作系统尊重用户使用本机浏览器的意图,不会打开应用程序。https://login.example.com他们提交凭据的位置。https://login.example.com将用户重定向到https://www.example.com. 此时,Android 和 iOS 都打开了该应用程序。最好在浏览器中进行重定向,以便继续尊重用户的意图。我相信这是由于从非应用程序/通用链接域重定向到应用程序/通用链接域所致。
有没有办法在不导致应用程序打开的情况下执行此重定向?我尝试通过Location标头重定向,并通过<meta http-equiv="refresh" content="0; URL='https://www.example.com'"/>具有相同结果的head 标记进行重定向。我能看到的唯一剩余的尝试是在www子域下托管我们的登录功能。
android deep-linking ios ios-universal-links android-app-links
我在这个格式的JS中有一个字符串:
HTTP\X3A\X2F\x2fwww.url.com
如何从中获取解码后的字符串?我尝试了unescape(),string.decode,但它没有对此进行解码.如果我在浏览器中显示该编码字符串它看起来很好(http://www.url.com),但我想在显示它之前操纵该字符串.
谢谢.
我们看到一个问题,我们的一个intent服务意外地null为我们的一些用户检索了一个String extra.我们无法重现这一点,并且我们不知道受影响用户的设备上是否随机或一致.受影响的用户与设备类型或Android版本之间似乎没有相关性.
我正在扩展IntentService和实现这样的handleIntent方法:
@Override
public void handleIntent(Intent intent) {
String action = intent.getAction();
if (action.Equals(ACTION_MARK_UNREAD)) {
String messageKey = intent.getStringExtra(EXTRA_MESSAGE_KEY);
// messageKey is null for some users
}
}
Run Code Online (Sandbox Code Playgroud)
有字段:
public static final String ACTION_MARK_UNREAD = "com.myapp.action.MARK_UNREAD";
public static final String EXTRA_MESSAGE_KEY = "extraMessageKey";
Run Code Online (Sandbox Code Playgroud)
在片段中,我们快速连续启动此服务6次:
for (int i = 0; i < 6; i++) {
Intent i = new Intent(MyIntentService.ACTION_MARK_UNREAD);
i = i.setClass(mContext, MyIntentService.class);
i.putExtra(MyIntentService.EXTRA_MESSAGE_KEY, i.toString());
mContext.startService(i);
}
Run Code Online (Sandbox Code Playgroud)
任何想法,为什么服务将获取null的messageKey额外?
我们在应用程序中有其他区域启动此相同的服务,当发生这种情况时,我们无法确定它来自哪个区域.但是,通过查看日志,它似乎来自我提到的这个片段.日志显示发生的客户端时间戳 …
对于内部网站,我正在尝试在网络上显示avi文件的内嵌视频.
<video class="VideoTagLink" src="file://\\network\path\file.avi" controls="controls"></video>
Run Code Online (Sandbox Code Playgroud)
在IE9中我得到一个红色X而Chrome只显示一个播放按钮 - 这是HTML 5支持的场景吗?
编辑:我已将我的HTML更改为:
<video class="VideoTagLink" controls="controls">
<source src="http://localhost:99/Handlers/GetVideo?path=\\network\path\file.avi" type="video/x-msvideo">
</video>
Run Code Online (Sandbox Code Playgroud)
我的处理程序只是:
public ActionResult GetVideo(string path)
{
return base.File(path, "video/x-msvideo");
}
Run Code Online (Sandbox Code Playgroud)
所以我相信我发送了正确的内容类型.我在IIS中验证*.avi映射到video/x-msvideo.如果我直接在任一浏览器中导航到该src URL,我会得到视频文件的下载提示,所以我认为它工作正常.
我注意到我的设备和托管在https://example.com/.well-known/assetlinks.json上的 DAL 之间的缓存机制的影响,我希望了解它是如何工作的,以及是否可以绕过它。
问题是我正在对 DAL 的更改进行原型设计(特别是添加另一个应用程序,但该更改应该与问题的目的无关),并且从应用程序的角度看不到更改。例子:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"sha256_cert_fingerprints": [
"<redacted>"
],
"namespace": "android_app",
"package_name": "com.my_app"
}
}
]
Run Code Online (Sandbox Code Playgroud)
我安装了com.my_app,验证成功。
我将 DAL 编辑为以下内容(请注意添加了第二个应用程序条目):
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"sha256_cert_fingerprints": [
"<redacted>"
],
"namespace": "android_app",
"package_name": "com.my_app"
}
},
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"sha256_cert_fingerprints": [
"<redacted>"
],
"namespace": "android_app",
"package_name": "com.my_other_app"
}
}
]
Run Code Online (Sandbox Code Playgroud)
com.my_other_app,验证失败。com.my_other_app,验证成功。使用Google 的语句列表测试器 …
我正在尝试修改现有代码,而不是Android新手.如果我正在解释的任何概念或假设在这个世界上没有意义,请告诉我!
我的目标是为XML列表视图的空视图定义布局.今天,我们通过编程调整onActivityCreated我的CustomListFragment派生的默认空视图来实现此功能ListFragment:
setEmptyText(getResources().getString(R.string.listview_empty));
TextView emptyTextView = (TextView) getListView().getEmptyView();
emptyTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.listview_empty_text_size));
emptyTextView.setTextColor(getResources().getColor(R.color.listview_empty_text));
Run Code Online (Sandbox Code Playgroud)
我宁愿用XML定义我的空视图的样式.它更干净,我可以使用自定义布局,而现在它只允许一个字符串.
它似乎依赖于默认的listview布局(因为我inflate在片段代码中找不到任何内容),其中包含空文本视图,进度指示器等.我试图提供我的自定义布局; 这是我的XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No items to show."/>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
现在我覆盖onCreateView了我的CustomListFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.custom_listview, container, false);
return view;
}
Run Code Online (Sandbox Code Playgroud)
我删除了上面发布的代码片段onActivityCreated.
现在,我得到一个崩溃,因为ListFragment的mProgressContainer为空.它最初设置ensureList()为:
mProgressContainer = root.findViewById(INTERNAL_PROGRESS_CONTAINER_ID);
Run Code Online (Sandbox Code Playgroud)
我应该在自定义布局中定义"Progress Container"控件吗?在我看来,这不是正确的方法,因为我需要给它id …