小编use*_*114的帖子

Androidx 片段中的 getViewLifeCycleOwner() 与“this”与 this.getActivity()

我们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,以及它是否会导致使用thisthis.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 android-lifecycle android-fragments

14
推荐指数
1
解决办法
6386
查看次数

从 Android Studio 运行时,为什么 Android 应用程序会在后台启动?

在 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:

https://pastebin.com/T1HFU9zb

第二种情况的 Logcat:

https://pastebin.com/qJque7A7

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

android android-studio android-studio-4.0

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

在php中声明一个对象数组

如何在php中声明对象列表作为私有实例变量?

在Java中,声明看起来像这样 private ArrayList<Object> ls ,构造函数会有这个 ls = new ArrayList<Object>();

谢谢

php

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

Java OOP封装.为什么是Object.doSomething(); 比doSomething(对象)更好;?

我正在努力解释java中的oop概念.

oop的一个主要原则是物体有方法; 所以Object.method(); 作品.我将其与程序编程进行对比,其中必须使用方法(Object).

这称为封装吗?

oop方式有哪些优点?

java oop

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

我将我的本地GIT仓库复制到另一个位置,我无法提交

我将我的本地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"已经存在!

git vim

4
推荐指数
1
解决办法
1669
查看次数

如果程序结束,RubberDuck可以测试吗?

我正在使用RubberDuck开发测试,并希望从程序中测试MsgBox输出.问题在于程序在输出MsgBox后立即结束 - 实际上是一个"结束"语句.

当运行RubberDuck测试并使用Fakes.MsgBox.Returns时,会出现一个不确定的黄色结果,并显示消息"运行测试时出现意外的COM异常"

我试过在测试结束时放置一个"Assert.Fail"; 然而,似乎程序结束会引发争议.

RubberDuck中的测试是否可以检测程序是否结束?

vba rubberduck

4
推荐指数
1
解决办法
100
查看次数

为什么SSL如此特别?我不能自己实施RSA吗?

我可以自己实施RSA,而不是在ssl上花费一大堆$$吗?(我不关心证明网站的身份;我只想加密客户端和服务器之间的密码以防止中间人攻击).我读过任何自定义解决方案都可能非常不安全,但是有人可以阅读我的计划并做出深思熟虑的回应吗?

首先,我将创建公钥和私钥.我会用javascript加密客户端密码,将密码的字母翻译成ascii-values,然后乘以或添加(任何建议?)这些ascii值来获取"未加密的消息".然后我会使用javascript和公钥加密此消息.

在服务器上,我将使用私钥解密安全邮件,最后得到密码的ascii-values的总和/乘积.关于如何从中获取单个字母的任何提示?

编辑:我已经得出结论,SSL是最好的方式.我只关注交易的客户端到服务器端(所有客户端发送的都是密码).当然,服务器发送给客户端的信息很有价值,不应该容易受到MITM攻击.感谢您提供免费的SSL建议.

谢谢

security encryption ssl client cryptography

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

当多个表发生更改时,防止 Room Observable 查询多次触发

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

rx-java2 android-room

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