有一个创建仅限时间的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,下一分钟它将运行正常. …
我正在尝试使用 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 9(Pie)严重限制了wifi扫描,从而削弱了任何使用类似GPS的频率进行wifi记录或基于wifi的位置查找的应用程序.
如上面链接的故障单中所述:
android.Manifest.permission.NETWORK_SETTINGS权限的应用程序免于扫描限制(参见文档)但是,我没有android.Manifest.permission.NETWORK_SETTINGS在文档中的任何地方找到描述(我希望它在android.manifest.permission中记录).
如果我只是在清单中声明,应用程序构建正常,安装正常,但我没有看到任何额外的权限(即使我选择显示所有),至少在奥利奥(不幸的是我没有一个Pie设备来测试在)).
是android.Manifest.permission.NETWORK_SETTINGS普通用户(即非系统)应用程序可以使用的常规权限吗?
我需要从我的应用程序中的几个非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停止时中止运行时权限对话框?
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 文件?
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() 已弃用,应用可能无法再在以后的版本中启动扫描.
问题:
ScanResult,我需要启动RTT测距请求?我正在尝试为我维护的项目构建 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,而不是某个存档中)?
有没有办法将整个存储库从 Github 移动到 GitLab?
对于代码本身,这将是在 GitLab 上创建一个新的 repo 并推送到它的简单问题。
Wiki 页面位于 Github 上的一个单独分支中,并使用 Git 机制进行管理;AFAIK 同样适用于 GitLab。页面的相同故事。
这将问题和合并请求作为主要的开放点。有没有办法将它们从 Github 复制到 GitLab,至少在迁移时它们所处的状态?
Github 提供了一个导出功能,而 GitLab 有一个可以导入 Github 存储库的导入功能——这些对上述问题有帮助吗?
在我的应用程序中,我想为用户提供一种从 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);\nRun Code Online (Sandbox Code Playgroud)\n\nlogcat 显示我设置的 URI 是file:///sdcard/Android/data/my.app/files,但文件选择器 UI 默认为共享存储根 ( /sdcard)。
以下代码有效(根据文档需要 API 26+,意图可从 API 中获取DocumentsContract.EXTRA_INITIAL_URI):
// 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) 我刚刚拿出几个月前写的一段代码。该代码从 Web 服务器获取 XML 文档并使用 JAXB 对其进行解析。上次我尝试时,效果非常好;现在我遇到了一个例外:
\n\norg.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)\nRun Code Online (Sandbox Code Playgroud)\n\n环顾四周,这表明 XML 标头数据存在一些问题,即<!DOCTYPE ...>. 答案表明该声明具有误导性:在所描述的情况下,systemId 完全丢失,尽管错误只是抱怨其前面缺少空格。
但是,如果我使用 Web 浏览器获取 XML 文档,它甚至不包含标<!DOCTYPE ...>头。
解析我几个月前检索到的 XML 文档没有出现任何问题。
\n\n如果我比较今天检索到的文档和几个月前的文档,则两者在根元素的开头都是完全相同的。
\nandroid ×5
java ×2
android-ndk ×1
android-wifi ×1
date ×1
deb ×1
debian ×1
git ×1
github ×1
gitlab ×1
gradle ×1
jar ×1
jaxb ×1
permissions ×1
wifimanager ×1
xml-parsing ×1