小编use*_*408的帖子

解析日期时的NumberFormatException

有一个创建仅限时间的Date对象的函数.(为什么这是必需的是一个长篇故事,在这种情况下是无关紧要的,但我需要与XML世界中的一些东西进行比较,其中TIME(即仅时间)是一个有效的概念).

private static final SimpleDateFormat DF_TIMEONLY = new SimpleDateFormat("HH:mm:ss.SSSZ");    

public static Date getCurrentTimeOnly() {

    String onlyTimeStr = DF_TIMEONLY.format(new Date());  // line #5
    Date  onlyTimeDt = null;
    try {
        onlyTimeDt = DF_TIMEONLY.parse(onlyTimeStr);  // line #8
    } catch (ParseException ex) { 
        // can never happen (you would think!)
    }
    return onlyTimeDt;
}
Run Code Online (Sandbox Code Playgroud)

可能至少有几种方法可以在Java中创建一个仅限日期的日期(或者更确切地说,日期部分是1970-01-01),但我的问题实际上并非如此.

我的问题是这段代码在生产运行很长时间后开始在#8行上随机抛出NumberFormatException.从技术上讲,我会说这应该是不可能的,对吧?

以下是来自上面一段代码的随机NumberFormatExceptions的摘录:

java.lang.NumberFormatException: multiple points
java.lang.NumberFormatException: For input string: ".11331133EE22"
java.lang.NumberFormatException: For input string: "880044E.3880044"
java.lang.NumberFormatException: For input string: "880044E.3880044E3"
Run Code Online (Sandbox Code Playgroud)

首先,我希望我们能够正式认为这应该是不可能的吗?代码使用相同的format(DF_TIMEONLY)作为输出然后输入.如果你不同意它应该是不可能的,请告诉我.

我无法在独立环境中重新生成问题.当JVM运行很长时间(> 1周)时,问题似乎就出现了.我无法找到问题的模式,即夏令时/冬令时,上午/下午等.错误是零星的,这意味着一分钟它将抛出NumberFormatException,下一分钟它将运行正常. …

java date

24
推荐指数
1
解决办法
1万
查看次数

NDK 未配置(虽然已安装)——如何在没有 Android Studio 的情况下修复

我正在尝试使用 Gradle 构建一个 Android 项目。该项目使用本机代码,因此需要我安装的 NDK。

但是,Gradle 失败并出现以下错误:

> NDK not configured. 
  Download it with SDK manager.
Run Code Online (Sandbox Code Playgroud)

Android 的 SDK Manager 没有将 NDK 列为一个选项。此外,我的盒子上安装了 NDK,所以错误似乎是 Gradle 没有找到它。

大多数答案都假设用户拥有 Android Studio,而我没有也不想要。有没有办法解决这个问题?

android gradle android-ndk android-gradle-plugin

19
推荐指数
2
解决办法
1万
查看次数

使用NETWORK_SETTINGS权限防止在Android 9(Pie)上进行wifi扫描限制

正如一些人所说,Android 9(Pie)严重限制了wifi扫描,从而削弱了任何使用类似GPS的频率进行wifi记录或基于wifi的位置查找的应用程序.

如上面链接的故障单中所述:

  • 每个前台应用程序限制为每2分钟扫描4次
  • 所有后台应用程序合并为每30分钟一次扫描
  • 持有android.Manifest.permission.NETWORK_SETTINGS权限的应用程序免于扫描限制(参见文档)

但是,我没有android.Manifest.permission.NETWORK_SETTINGS在文档中的任何地方找到描述(我希望它在android.manifest.permission中记录).

如果我只是在清单中声明,应用程序构建正常,安装正常,但我没有看到任何额外的权限(即使我选择显示所有),至少在奥利奥(不幸的是我没有一个Pie设备来测试在)).

android.Manifest.permission.NETWORK_SETTINGS普通用户(即非系统)应用程序可以使用的常规权限吗?

android android-permissions android-9.0-pie

8
推荐指数
1
解决办法
2998
查看次数

取消通过通知启动的运行时权限请求

我需要从我的应用程序中的几个非UI组件访问位置.由于应用程序可能没有所需的权限,因此我在如何从Android Marshmallow中的服务请求权限的答案中实现了一个解决方案:如果应用程序没有权限,则会显示通知.点击该通知将使用户变为空Activity,这将在顶部显示运行时权限对话框.

但是,我现在遇到以下问题:如果用户在没有做出选择的情况下解除该对话框(例如通过点击Home)并稍后调出我的应用程序的任何其他活动,则会重新显示运行时权限对话框而不是所需的活动.

这是我的通知代码:

    Intent permIntent = new Intent(context, PermissionRequestActivity.class);
    permIntent.putExtra(Const.KEY_RESULT_RECEIVER, resultReceiver);
    permIntent.putExtra(Const.KEY_PERMISSIONS, permissions);
    permIntent.putExtra(Const.KEY_REQUEST_CODE, requestCode);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
    stackBuilder.addParentStack(PermissionRequestActivity.class);
    stackBuilder.addNextIntent(permIntent);

    PendingIntent permPendingIntent =
            stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
                    );

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
    .setSmallIcon(notificationIcon)
    .setContentTitle(notificationTitle)
    .setContentText(notificationText)
    .setOngoing(true)
    .setAutoCancel(true)
    .setWhen(0)
    .setContentIntent(permPendingIntent)
    .setStyle(null);

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(requestCode, builder.build());
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在Activity停止时中止运行时权限对话框?

permissions android android-6.0-marshmallow

7
推荐指数
0
解决办法
680
查看次数

从命令行运行带有依赖项的 jar

Java 可以像这样从命令行运行 jar 文件:

java -jar foobar.jar
Run Code Online (Sandbox Code Playgroud)

但是,如果foobar.jar取决于,则只要调用 中的baz.jar任何类,上述内容就会抛出异常baz.jar,因为 JVM 无法知道在哪里查找这些类。

但是,手册页(Linux 上的 OpenJDK 8)指出:

使用该-jar选项时,指定的 JAR 文件是所有用户类的来源,其他类路径设置将被忽略。

如果重新打包不是一个选项,有没有办法从命令行运行具有依赖项的 jar 文件?

java jar

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

在Android 9中正确使用wifi RTT

Android 9(Pie)引入了wifi RTT,用于基于wifi的gelolocation.

在Android 8(Oreo)之前的版本中,应用程序会定期请求wifi扫描.Android 9中正在大量限制此功能:前台应用程序现在可以在2分钟的窗口中请求最多4次扫描; 对于所有后台应用程序,后台应用程序限制为每30分钟扫描一次.避免这种限制的唯一方法是NETWORK_SETTINGS权限,但是,这是一个签名权限(我认为这意味着它需要使用与OS构建相同的密钥进行签名,无论它是否是系统应用程序)因此适用于第三方应用.

我知道wifi RTT测距只能用a启动ScanResult,因此我需要先运行wifi扫描.但是,我可以通过重复使用相同的扫描结果来绕过油门来进行一些RTT测距请求,但代价是在一段时间内没有获得新的wifis.

但是,文档还提到了针对wifi RTT范围的限制,但没有说明限制是什么.

最后,WifiManager.startScan() 已弃用,应用可能无法再在以后的版本中启动扫描.

问题:

  • 请求wifi RTT测距的限制是什么?
  • 获取a的正确方法是什么ScanResult,我需要启动RTT测距请求?

android wifimanager android-wifi android-9.0-pie

6
推荐指数
1
解决办法
520
查看次数

构建一个没有 tarball 的 Debian 软件包

我正在尝试为我维护的项目构建 Debian 软件包。因此,源代码树(位于 Git 存储库中)有一个名为 的子目录debian,其中包含与 Debian 相关的文件。

但是,当我运行时debuild -us -uc,我得到以下信息:

This package has a Debian revision number but there does not seem to be
an appropriate original tar file or .orig directory in the parent directory
Run Code Online (Sandbox Code Playgroud)

我尝试过将source/formatfrom的内容更改为,但仍然没有乐趣。3.0 (quilt)3.0 (native)

如何防止 Debian 工具链坚持使用 tarball(假设源代码位于 的父目录中debian,而不是某个存档中)?

debian deb

6
推荐指数
1
解决办法
860
查看次数

将存储库从 Github 移动到 Gitlab

有没有办法将整个存储库从 Github 移动到 GitLab?

对于代码本身,这将是在 GitLab 上创建一个新的 repo 并推送到它的简单问题。

Wiki 页面位于 Github 上的一个单独分支中,并使用 Git 机制进行管理;AFAIK 同样适用于 GitLab。页面的相同故事。

这将问题和合并请求作为主要的开放点。有没有办法将它们从 Github 复制到 GitLab,至少在迁移时它们所处的状态?

Github 提供了一个导出功能,而 GitLab 有一个可以导入 Github 存储库的导入功能——这些对上述问题有帮助吗?

git github gitlab

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

为 ACTION_OPEN_DOCUMENT 提供默认路径

在我的应用程序中,我想为用户提供一种从 app\xe2\x80\x99s 数据目录中选择文件的方法。这是我的代码:

\n\n
// use ACTION_OPEN_DOCUMENT because ACTION_GET_CONTENT will give us\n// gallery and other stuff we don\xe2\x80\x99t need\nIntent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);\nintent.addCategory(Intent.CATEGORY_OPENABLE);\nUri uri = Uri.parse(getExternalFilesDir(null).getAbsolutePath());\nLog.d(TAG, "Browsing " + uri.toString());\nintent.setDataAndType(uri, "*/*");\n// show the entire internal storage tree\nintent.putExtra("android.content.extra.SHOW_ADVANCED", true);\nstartActivityForResult(intent, 42);\n
Run Code Online (Sandbox Code Playgroud)\n\n

logcat 显示我设置的 URI 是file:///sdcard/Android/data/my.app/files,但文件选择器 UI 默认为共享存储根 ( /sdcard)。

\n\n

以下代码有效(根据文档需要 API 26+,意图可从 API 中获取DocumentsContract.EXTRA_INITIAL_URI):

\n\n
// works only with this intent, at the expense of gallery etc. appearing\nIntent intent = new Intent(Intent.ACTION_GET_CONTENT);\nintent.addCategory(Intent.CATEGORY_OPENABLE);\n\n// apparently we need …
Run Code Online (Sandbox Code Playgroud)

android storage-access-framework

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

publicId 和 systemId 之间需要空格,但 XML 看起来没问题

我刚刚拿出几个月前写的一段代码。该代码从 Web 服务器获取 XML 文档并使用 JAXB 对其进行解析。上次我尝试时,效果非常好;现在我遇到了一个例外:

\n\n
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 50; White spaces are required between publicId and systemId.\n    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)\n    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)\n    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)\n
Run Code Online (Sandbox Code Playgroud)\n\n

环顾四周,这表明 XML 标头数据存在一些问题,即<!DOCTYPE ...>. 答案表明该声明具有误导性:在所描述的情况下,systemId 完全丢失,尽管错误只是抱怨其前面缺少空格。

\n\n

但是,如果我使用 Web 浏览器获取 XML 文档,它甚至不包含标<!DOCTYPE ...>头。

\n\n

解析我几个月前检索到的 XML 文档没有出现任何问题。

\n\n

如果我比较今天检索到的文档和几个月前的文档,则两者在根元素的开头都是完全相同的。

\n

jaxb xml-parsing

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