小编sig*_*ger的帖子

String.split什么时候返回一个空数组?

我的日志显示此异常: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.我期待听到我遗漏的明显细节.

java android

12
推荐指数
1
解决办法
6616
查看次数

浓缩咖啡冻结视图与循环动画

我有一个视图,其中一个元素在无限循环中使用以下动画进行动画处理:

<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)

android android-espresso

12
推荐指数
1
解决办法
7104
查看次数

setTranslationX/Y和offsetLeftAndRight/offsetTopAndBottom之间的区别?

CoordinatorLayout正在使用ViewCompat.offsetLeftAndRightViewCompact.offsetTopAndBottomAPI 一起使用其中的子视图位置进行动画处理.

当添加或删除子视图时CoordinatorLayout,布局操作将每个子视图的位置重置到屏幕的左上角,即没有任何偏移.

文章提供了一个解决方案,通过在子视图设置布局听众和恢复老位置.

我注意到使用setTranslationXsetTranslationYAPI,这个问题不会发生.儿童在父母布局事件后保持其位置.

我应如何在这两套API之间做出决定,以便在屏幕上安排我的观点?我很谨慎地使用它们而不理解它们的差异.通过阅读官方文档,我没有得到很好的理解.

android android-layout

11
推荐指数
1
解决办法
1004
查看次数

防止重定向触发应用程序/通用链接行为

我们有一个网络产品和 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

9
推荐指数
1
解决办法
1084
查看次数

在javascript中解码十六进制字符串

我在这个格式的JS中有一个字符串:

HTTP\X3A\X2F\x2fwww.url.com

如何从中获取解码后的字符串?我尝试了unescape(),string.decode,但它没有对此进行解码.如果我在浏览器中显示该编码字符串它看起来很好(http://www.url.com),但我想在显示它之前操纵该字符串.

谢谢.

javascript

8
推荐指数
4
解决办法
3万
查看次数

可以快速连续多次启动意向服务会导致零附加吗?

我们看到一个问题,我们的一个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)

任何想法,为什么服务将获取nullmessageKey额外?

我们在应用程序中有其他区域启动此相同的服务,当发生这种情况时,我们无法确定它来自哪个区域.但是,通过查看日志,它似乎来自我提到的这个片段.日志显示发生的客户端时间戳 …

android android-intent

7
推荐指数
1
解决办法
975
查看次数

HTML 5视频标签:是否可以将src设置为网络资源?

对于内部网站,我正在尝试在网络上显示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,我会得到视频文件的下载提示,所以我认为它工作正常.

html5 html5-video

5
推荐指数
1
解决办法
1611
查看次数

Google 的数字资产链接文件缓存机制可以被操纵吗?

我注意到我的设备和托管在https://example.com/.well-known/assetlinks.json上的 DAL 之间的缓存机制的影响,我希望了解它是如何工作的,以及是否可以绕过它。

问题是我正在对 DAL 的更改进行原型设计(特别是添加另一个应用程序,但该更改应该与问题的目的无关),并且从应用程序的角度看不到更改。例子:

  1. 我从这个 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)
  1. 我安装了com.my_app,验证成功。

  2. 我将 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)
  1. 我安装了com.my_other_app,验证失败。
  2. 等待24小时,重新安装com.my_other_app,验证成功。

使用Google 的语句列表测试器 …

android digital-assets-links android-app-links

5
推荐指数
0
解决办法
729
查看次数

XML中ListFragment的自定义空视图

我正在尝试修改现有代码,而不是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.

现在,我得到一个崩溃,因为ListFragmentmProgressContainer为空.它最初设置ensureList()为:

mProgressContainer = root.findViewById(INTERNAL_PROGRESS_CONTAINER_ID);
Run Code Online (Sandbox Code Playgroud)

我应该在自定义布局中定义"Progress Container"控件吗?在我看来,这不是正确的方法,因为我需要给它id …

android android-listview

3
推荐指数
1
解决办法
4406
查看次数