我们observe
在片段中大量使用了 LiveData 的方法。最近发布的 androidx 片段 sdk 导致 Android Studio 将 的实例标记liveDataObject.observe(this)
为不正确,而支持liveDataObject.observe(getViewLifecycleOwner())
.
添加了新的 Lint 检查,以确保您在从 onCreateView()、onViewCreated() 或 onActivityCreated() 观察 LiveData 时使用 getViewLifecycleOwner()。(b/137122478) https://developer.android.com/jetpack/androidx/releases/fragment
我们很担心实现这个变化,因为我们不明白 的功能与getViewLifecycleOwner()
using的功能相比如何this
,以及它是否会导致使用this
或this.getActivity()
在 Fragment 中设置 ViewModel 时发生冲突。
此外,我们使用 Android Navigation 组件并注意到当用户导航到同一个 Activity 中的不同片段时,每个片段的onDestroyView()
方法都会被调用,但不会onDestroy()
这是我们的代码示例 onViewCreated()
vm.getStemLengths().observe(this, stemLengths -> {
this.stemLengths = new ArrayList<>(Stream.of(stemLengths).map(stemLength ->
new SearchModel(Integer.toString(stemLength.getValue()))).toList());
});
Run Code Online (Sandbox Code Playgroud)
后来,在 onDestroyView()
vm.getStemLengths().removeObservers(this);
Run Code Online (Sandbox Code Playgroud)
同时,根据片段,包含 LiveData 的 ViewModel 设置为以下之一:
vm = new ViewModelProvider(this.getActivity()).get(PrepareVM.class);
Run Code Online (Sandbox Code Playgroud)
跨活动中的片段保留视图模型。
或者: …
在 Android Studio 4.0 中按“运行”时,有时我的应用程序会在设备的后台启动 - 运行 Android 7.0 的平板电脑。这意味着我必须转到设备上的“最近项目”视图,然后按下那里的应用程序才能打开。该应用程序不会像往常一样在前台启动。
发生这种情况时,Android Studio 的“运行”视图窗口中不会显示任何日志 - 即使从“最近项目”视图打开应用程序后也是如此。
我联系了谷歌,但没有成功解决。我想知道这里是否有人遇到过这个问题,或者知道这可能是什么。
在模拟器上复制,而不是在新的空项目上复制。
编辑:添加日志 - 这些是使用adb shell logcat
命令直接从设备中获取的。这些问题仅在应用程序已经运行时发生,并在升级到 Android Studio 4.0 后开始发生。我的应用程序的名称是poscosecha
,完整的包名称是com.plantecuador.poscosecha
. 该设备是带有 Android 7.0 (API 24) 的 RCA 10" 平板电脑。该错误在具有相同 Android 版本的模拟器上重现。它不会 100% 发生,但如果应用程序已经存在,则肯定会超过 75%跑步。
有两种不同的错误情况。首先,应用程序移至后台。在第二种情况下,应用程序完全关闭(不会出现在后台任务中)。如果运行之间有变化,第一种情况似乎更常发生,而如果没有变化,则第二种情况更常发生。
第一种情况的 Logcat:
第二种情况的 Logcat:
编辑 2:添加清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.plantecuador.poscosecha">
<uses-permission android:name="android.permission.INTERNET" /> <!-- Bluetooth printer permissions -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/> …
Run Code Online (Sandbox Code Playgroud) 如何在php中声明对象列表作为私有实例变量?
在Java中,声明看起来像这样
private ArrayList<Object> ls
,构造函数会有这个
ls = new ArrayList<Object>();
谢谢
我正在努力解释java中的oop概念.
oop的一个主要原则是物体有方法; 所以Object.method(); 作品.我将其与程序编程进行对比,其中必须使用方法(Object).
这称为封装吗?
oop方式有哪些优点?
我将我的本地git repo复制到我的sites文件夹,以便我可以在本地开发,然后将更改推送到github.
当我尝试通过"git commit -a"提交时,我收到此消息:
E325:注意
找到一个名为".git/.COMMIT_EDITMSG.swp"的交换文件
owned by: usrname dated: Sat Feb 4 18:56:02 2012
file name: ~myUsername/oldRepoLocation/.git/COMMIT_EDITMSG
modified: YES
process ID: 15435
Run Code Online (Sandbox Code Playgroud)
打开文件".git/COMMIT_EDITMSG"
dated: Sun Feb 12 19:51:43 2012
NEWER than swap file!
Run Code Online (Sandbox Code Playgroud)
(1)另一个程序可能正在编辑同一个文件.如果是这种情况,请注意在进行更改时不要以同一文件的两个不同实例结束.退出,或继续谨慎.
(2)此文件的编辑会话崩溃.如果是这种情况,请使用":recover"或"vim -r .git/COMMIT_EDITMSG"来恢复更改(请参阅":help recovery").如果您已经这样做,请删除交换文件".git/.COMMIT_EDITMSG.swp"以避免此消息.
交换文件".git/.COMMIT_EDITMSG.swp"已经存在!
我正在使用RubberDuck开发测试,并希望从程序中测试MsgBox输出.问题在于程序在输出MsgBox后立即结束 - 实际上是一个"结束"语句.
当运行RubberDuck测试并使用Fakes.MsgBox.Returns时,会出现一个不确定的黄色结果,并显示消息"运行测试时出现意外的COM异常"
我试过在测试结束时放置一个"Assert.Fail"; 然而,似乎程序结束会引发争议.
RubberDuck中的测试是否可以检测程序是否结束?
我可以自己实施RSA,而不是在ssl上花费一大堆$$吗?(我不关心证明网站的身份;我只想加密客户端和服务器之间的密码以防止中间人攻击).我读过任何自定义解决方案都可能非常不安全,但是有人可以阅读我的计划并做出深思熟虑的回应吗?
首先,我将创建公钥和私钥.我会用javascript加密客户端密码,将密码的字母翻译成ascii-values,然后乘以或添加(任何建议?)这些ascii值来获取"未加密的消息".然后我会使用javascript和公钥加密此消息.
在服务器上,我将使用私钥解密安全邮件,最后得到密码的ascii-values的总和/乘积.关于如何从中获取单个字母的任何提示?
编辑:我已经得出结论,SSL是最好的方式.我只关注交易的客户端到服务器端(所有客户端发送的都是密码).当然,服务器发送给客户端的信息很有价值,不应该容易受到MITM攻击.感谢您提供免费的SSL建议.
谢谢
我在 Android Room 中使用可观察查询来触发更新,最终在底层数据发生变化时改变 UI。
有时这些查询涉及多个表,有时用户执行将新值插入到这些表中的操作。插入通常一个接一个地快速完成(即在不到二分之一秒的时间跨度内)
目前,从 Room 订阅更新的观察者将被触发 x 次,其中 x 是查询中已更新的表的数量。
因此,如果值在一秒内插入到查询中的六个不同表中,则任何观察该查询的观察者都会触发六次。
有没有办法告诉 Room;“每秒最多触发观察者一次”?或者,更好的是“当您看到更新时,等待半秒以收集任何其他更新,然后立即通知观察者所有内容”?
这是房间查询。正如您所看到的,涉及多个表。
@Query("SELECT Distinct order_material.* FROM order_material" +
" JOIN orders on order_material.orderId = orders.id" +
" JOIN assignment on order_material.id = assignment.orderMaterialID" +
" JOIN box_inside on assignment.boxInsideID = box_inside.id" +
" WHERE orders.isActive = 1 " +
" AND (box_inside.dateCFOrigPacked <= :dateLimitYema OR box_inside.stemLength IS NOT NULL)" +
" AND assignment.id IN (SELECT id FROM assignment WHERE active = 1" +
" AND …
Run Code Online (Sandbox Code Playgroud) android ×2
android-room ×1
client ×1
cryptography ×1
encryption ×1
git ×1
java ×1
oop ×1
php ×1
rubberduck ×1
rx-java2 ×1
security ×1
ssl ×1
vba ×1
vim ×1