小编fer*_*spr的帖子

MongoTemplate pull subdocument

我需要在MongoTemplate中拉一个子文档,但无法弄清楚如何做到这一点.

我保存的文件是:

{
    "_id" : "FooUser",
    "_class" : "com.domain.User",
    "tests" : [ 
        {
            "variant" : {
                "_id" : "C",
                "probability" : "0.5"
            },
            "experiment" : {
                "$ref" : "experiment",
                "$id" : "MyExperiment2"
            }
        }, 
        {
            "variant" : {
                "_id" : "B",
                "probability" : "0.5"
            },
            "experiment" : {
                "$ref" : "experiment",
                "$id" : "MyExperiment1"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我只需要删除具有MyExperiment1的测试.执行以下命令有效:

db.user.update( {}, {$pull: { "tests":{"experiment.$id":"MyExperiment1"}}}, {multi: true} )
Run Code Online (Sandbox Code Playgroud)

我应该如何使用Spring MongoTemplate编写这个?

我尝试了以下,但不起作用:

this.mongoTemplate.updateMulti(new Query(), new Update().pull("tests", "{\"experiment.$id\":\"MyExperiment1\"}"), "user");
Run Code Online (Sandbox Code Playgroud)

谢谢.

mongodb mongodb-query mongotemplate

10
推荐指数
1
解决办法
3769
查看次数

Jersey客户端发布二进制数据application-octet/stream

我想使用Jersey Client执行包含二进制数据的帖子.

卷曲的等价物是:

curl -v --header "Content-Type:application/octet-stream" --data-binary "abc" http://example.com
Run Code Online (Sandbox Code Playgroud)

我在官方文档中找不到如何做到这一点:http://jersey.java.net/documentation/latest/user-guide.html#client

谢谢.

java jersey-client

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

推送通知代码执行(强制退出应用程序)

我想知道像Whatsapp这样的应用程序如何能够向邮件的发件人发送送货回执(双绿色支票).

我已经看到,即使您强制退出Whatsapp(使用应用程序任务切换器并轻扫应用程序),发件人仍然会在手机上收到推送通知时获得送达回执(双绿色检查).显然,他们能够在接收推送通知时执行代码(向后端发出请求,通知交付).

由于iOS7可以发送带有"content-available"的推送通知有效负载:1,这使得通知的接收者能够执行用户代码,因此,首先我认为他们正在使用此功能.但是,如果用户强制退出应用程序,则在接收通知时不会执行用户代码.因此,我无法模仿Whatsapp行为.

我启用了功能>后台模式并检查了远程通知.

我正在用这种方法处理通知:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)

我正在发送带有此负载的通知:

{
    "aps":{
            "alert":"Hello world",
            "sound":"MySound.wav",
            "content-available":1
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经检查过:

我也读过有关PushKit的内容(虽然我没有尝试过),这可能对我有帮助,但我的理解是应用程序需要成为VOIP应用程序.很明显,我不想要求我的应用程序上的VOIP只在接收推送通知时执行代码.

谢谢.

push-notification apple-push-notifications ios

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

片段中的LiveData观察

从2019年开始,我正在尝试遵循最佳实践,从哪里开始观察LiveDataFragments,以及是否应该将该方法作为参数传递thisviewLifecycleOwner作为observe()方法的参数。

  • 根据此Google官方文档,我应该注意onActivityCreated()传递this(片段)作为参数。

  • 根据这一谷歌样,我应该遵守onViewCreated()传递viewLifecycleOwner的参数。

  • 根据这个I / O的视频,我不应该使用this,而是viewLifecycleOwner,但没有规定我应该从哪里开始观察。

  • 根据这一缺陷,我应该在遵守onActivityCreated()和使用viewLifecycleOwner

因此,我应该从哪里开始观察?我应该使用this还是viewLifecycleOwner

android android-fragments android-livedata android-architecture-components

6
推荐指数
2
解决办法
257
查看次数

如何在启用安全参数的不同导航图中重用片段?

我正在尝试在启用安全参数的不同导航图中重用片段。我注意到如果操作不同,我会收到编译错误。这是因为xxxFragmentDirections自动生成的代码只会生成其中一项操作。

nav_graph_1.xml 中

<navigation 
  ...
  <fragment
    android:id="@+id/myFragment"
    android:name="com.example.android.MyFragment">
    <action
      android:id="@+id/next_action"
      app:destination="@+id/dest_one" />
  </fragment>
  ...
Run Code Online (Sandbox Code Playgroud)

nav_graph_2.xml 中

<navigation 
  ...
  <fragment
    android:id="@+id/myFragment"
    android:name="com.example.android.MyFragment">
    <action
      android:id="@+id/other_action"
      app:destination="@+id/other_dest" />
  </fragment>
  ...
Run Code Online (Sandbox Code Playgroud)

一个简单的用例:一个有两个流程的银行应用程序:取款和存款,因此你可以有两个导航图。你可以有一个AmountFragment你可以只输入一个数字的地方,这可以重复用于提款或存款。但是,根据流程的不同,操作/目的地可能会有所不同。

那么,如何重用这个片段呢?

android android-fragments android-architecture-components android-architecture-navigation android-safe-args

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

仅在需要时重新注册地理围栏

根据Android地理围栏文档,如果发生以下情况,应重新注册地理围栏:

  • 设备重启。

解决方案:添加地理围栏时,应用程序应在内部存储地理围栏(SharedPreferences)。然后侦听设备的启动完成操作,然后重新注册存储的地理围栏。

  • 该应用程序已卸载并重新安装。

解决方案:用户应再次创建地理围栏或将其远程存储,然后在应用程序首次打开时进行检索。

  • 该应用程序的数据已清除。

解决方案:用户应再次创建地理围栏或将其远程存储,然后在应用程序首次打开时进行检索。


但是,在以下情况下,我不知道该怎么办,请您指教?

  • Google Play服务数据已清除。我如何发现这种情况?

  • 该应用程序已收到GEOFENCE_NOT_AVAILABLE警报。通常会在禁用NLP(Android的网络位置提供程序)后发生。不确定在哪里收到此“警报”

android android-geofence

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