小编Aca*_*lco的帖子

如何正确使用Google Plus登录多项活动?

通过多活动应用程序的流程,将Google+ api客户端生命周期捆绑在一起的好方法/推荐方法是什么?使活动依赖于onConnected api客户端方法来触发其功能,将其用作一次性"激活"的东西,或者可能完全不同的东西?

我目前正在努力了解如何在我的Android应用中正确使用Google+登录,该应用包含多项活动.

在第一阶段,我们的想法是使用G +登录来验证用户,并能够收到她的电子邮件,发送通知和类似的东西.最终我计划推出其他Google功能,例如地图或其他Google Play服务,所以我认为已经实施它很有用.

但是,我的应用程序没有按预期运行,我已经将问题缩小到这样一个事实,即当存在多个活动时,我还没有理解应用程序周期中的G +登录.

实现此auth方法的正确或推荐方法是什么?可能有一种形式可以指导我朝着正确的方向发展吗?

例如,我发现了一个非常简单的api客户端生命周期,但这与app流程有什么关系?

最初我有一个登录活动,我在其中放入登录按钮.按照Google的指南,我可以登录,当调用onConnected方法时,我启动Home Activity(有点像应用程序的仪表板或主屏幕).

这有点工作.例如,为每个活动处理onStart和onStop的好方法是什么?我是否应该每次为每项活动重新连接并重新验证api客户端?因此,使用BaseActivity实现所有这些可能是一个好主意.

另一个问题是,我应该使用相同的api客户端对象并以某种方式传递它,或者可能将它存储在Base Activity类中?或者我应该每次创建和初始化一个新的api客户端对象?

如何使用Login Activity对G +进行身份验证,然后只需获取电子邮件并将其存储在本地数据库中,并将用户标记为"已验证"或"活动"等.这样可以防止我每次关闭应用程序或暂停连接时都必须重新进行身份验证,甚至可以节省一些电量.

该应用程序实际上并没有使用G +发布或任何其他类似的功能.理想情况下,它应该可以脱机工作,只需要连接初始身份验证或其他一次性事物.

非常感谢任何正确方向的建议或指示.

编辑:我已经阅读了我能找到的所有使用Google+的指南和教程,并且每个人都从单一活动的角度来解决这个问题.我认为这是一个普遍存在的问题,它将受益于模式或至少一般的指导方针.

android google-api google-plus google-oauth

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

使用jar命令更新特定目录中JAR内的文件

所以我一直在高低寻找答案,显然没有找到满意的答案.

问题是我想在JAR中更新JAR(或任何文件),但是文件位于文件夹结构中,我希望避免在JAR之外再现,以便我可以更新它.

例:

Foo.jar (root directory)
/
|->/folder1
|
|->/folder2
|
|->/foo
    |
    |-->/bar
         |
         |---->/baz
               |
               |------>file_to_update.jar
Run Code Online (Sandbox Code Playgroud)

所以,如果我想使用jar命令更新它,我必须首先在JAR之外创建相同的文件夹结构然后执行

jar -uf Foo.jar -C foo/bar/baz/file_to_update.jar
Run Code Online (Sandbox Code Playgroud)

但是我想避免创建这个文件夹结构,因为对于某些文件它可能非常深,而且因为我可能需要更新整个容器JAR中的选定文件,所以我不想创建具有特定结构的这么多文件夹所以jar命令可以更新它们.

换句话说,我想告诉jar命令使用特定源目录中的特定源文件更新特定目标目录中的特定目标文件.

就是这样的

jar -uf Foo.jar -sourceFile /x/y/z/filetoupdate -destFile /a/b/c/filetoupdate 
Run Code Online (Sandbox Code Playgroud)

(我知道这种语法不起作用,只是为了举例说明我的需要).

可以这样做吗?当jar命令可以找到匹配的东西时,我绝对需要模仿整个文件夹结构,因为我可能需要更新文件夹结构中100个文件夹深度的文件,这对我来说非常奇怪..仅仅为了更新文件而重现过于复杂.

此外,我知道可以使用常规的ZIP实用程序,但是我在Linux中可用的那个实际上并没有更新文件,即使它说它已经完成(重新打开jar时,它的旧版本完好无损),现在我不能去寻找另一个(公司政策,没时间,测试问题,你的名字).

最后,如果我可以从命令行执行此操作,则意味着我可以创建批处理文件来更新大量特定文件,而无需创建文件夹结构.

我忘了说我也想避免不得不解开,更新,重新调整整个事情,因为这个JAR可以上升到2GB,所以这需要一段时间来做到这一点,基本上,添加一点资源文件到我的巨大的JAR.

非常感谢任何帮助!

java jar

30
推荐指数
2
解决办法
5万
查看次数

在Android上使用DI的具体好处是什么?

使用Android依赖注入框架的具体优势或优势是什么,如Dagger,TransfuseRoboGuice

例如,什么样的应用程序从使用DI中受益最多?是否有更多的性能优势,或者更多的是扩展应用程序的简易性,还是更多关于使其可测试?

问这个问题的原因之一是衡量我正在开发的应用程序是否真的会从中受益或不多.由于我打算在某些方面认真对待应用程序,可测试性和易于扩展性将是很好的,即使第一版本使用成本高(更多时间设置,学习曲线等).

谢谢!

android dependency-injection roboguice dagger transfuse

21
推荐指数
1
解决办法
7080
查看次数

如何在Spring / Spring Boot pom.xml中指定Java 11版本?

将Java 11指定为要在Spring(或Spring Boot)pom.xml文件中使用的版本的正确方法是什么?

即,我需要java.version在pom 的属性中添加什么值?

1.8正如文档所示,对于Java 8,我们使用的是Java 9 1.9

我不确定Java 11是否会1.11(尽管似乎不太可能),并且我已经看到它仅11在使用时指定maven-compiler-plugin,但是我没有使用编译器插件。

例如

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我到处搜索,找不到答案,因为我阅读的几乎所有文档以及与Java版本有关的博客文章仅显示版本8或版本9。

那我该怎么用呢?1.11还是只是11

我尝试了两者,但我的Web服务器似乎可以正确启动并正确编译(IntelliJ显示Information:javac 11.0.2 was used to compile java sources),但是我并不完全相信更改java.version值可以完成任何事情,因为我可以将其设置为eg 100并且一切正常。

我能找到的唯一相关问题是:与Java 11兼容的最低Spring版本由于使用OpenJDK 11 迁移到JDK 11Spring 4.3.x 之后,由于Hibernate错误而导致Spring Boot失败,但是它们并没有真正引起人们的注意。

java spring pom.xml maven spring-boot

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

将 jq 查询的结果聚合到单个数组中

我有一个包含独立 JSON 对象(即不是数组)的输入文件,我想从每个对象中过滤一些字段并使用结果元素创建一个数组。它基本上是 JSON 格式的日志语句列表。

我正在使用jq这个,它工作得很好,除了我无法将所有结果对象聚合到一个数组中。

输入是这样的:

{"name":"myname", "environment":"staging", "email":"email1@example.com", "time":"2017-04-02T05:00:00.046Z"}
{"name":"myname", "environment":"staging", "email":"email2@example.com", "time":"2017-02-02T05:00:00.046Z"}
...
{"name":"myname", "environment":"staging", "email":"email3@example.com", "time":"2017-10-02T05:00:00.046Z"}
{"name":"myothername", "environment":"staging", "time":"2017-10-02T05:00:00.046Z"}
Run Code Online (Sandbox Code Playgroud)

(注意最后一个条目没有email字段,因此null如果不过滤,它将返回一个值)

从这个对象列表中,我只想获取字段emailtime,并忽略其余字段,因此我使用了以下jq查询:

jq '{email: (.email | values), time: (.time | values)}' input.json

请注意,我使用values过滤器是因为日志消息是混合的,因此并非所有 json 对象都有该email字段,因此我忽略这些字段。

我现在的问题是,即使我得到了想要的结果,我又得到了一个列表,并且我想要一个数组。

即我得到类似的东西

{"email":"email1@example.com", "time":"2017-04-02T05:00:00.046Z"}
{"email":"email2@example.com", "time":"2017-02-02T05:00:00.046Z"}
...
{"email":"email3@example.com", "time":"2017-10-02T05:00:00.046Z"}
Run Code Online (Sandbox Code Playgroud)

我想要这样:

[
    {"email":"email1@example.com", "time":"2017-04-02T05:00:00.046Z"},
    {"email":"email2@example.com", "time":"2017-02-02T05:00:00.046Z"},
    ...,
    {"email":"email3@example.com", "time":"2017-10-02T05:00:00.046Z"}
]
Run Code Online (Sandbox Code Playgroud)

我尝试了几种不同的方法,但通常都会出现错误Cannot index array with string "email" …

json jq

12
推荐指数
1
解决办法
6803
查看次数

通过USB获取系统日期/时间

有没有办法通过USB查询系统的日期/时间而无需在主机上安装任何东西(可能只是驱动程序)?


原始问题的背景

为了避免XY问题,让我解释一下我正在尝试做什么.

为了能够为2FA计算TOTP令牌(例如Google Authenticator应用程序),您需要一个实时时钟来获取日期和时间.

有一个名为SC4-HSM的USB设备,我想用它来计算令牌,但它没有时钟,根据设计师的说法,添加一个太贵了(需要电池等).

原始问题的可能解决方案

该设备将与已经具有RTC的计算机一起使用.因此,我有了查询系统的日期/时间以解决问题的想法.

(注意:我知道USB设备可以连接到各种主机,并非所有主机都有RTC,但由于这只需要与计算机一起工作,我认为这应该不是问题)

我的第一个想法是可能有一些USB设备类有日期/时间需要,所以我可以将设备注册为该类型,然后我将能够查询值.

在浏览了设备类代码列表(Internet Archive)后,没有任何东西像我需要的日期/时间一样跳到我身边.我能想到的最接近的是:

我浏览了USB实施者论坛中设备类文档,但其中没有任何东西甚至与日期或时间有很大关系.

目前的问题

由于USB规格似乎是一个死胡同,我想可能有一种方法可以编写一个非常简单的USB驱动程序,可以在设备插入计算机时自动加载,然后我们可以使用驱动程序返回设备要求的日期/时间(除非我误解了某些内容).

我现在正在研究像Michael Opdenacker的Linux USB驱动程序这样的USB开发文档,我尝试了Linux USB项目,这似乎已经死了.通过Windows NT的驱动程序开发撇去只是为了得到一个想法,但是我仍然无法弄清楚这是否可能,以及它有多难.

我是一个完全的初学者,也许这是我的技能水平,但我想弄清楚我是否需​​要奇怪的黑客和变通办法,还是有更简单的方法来做到这一点?

关于它的信息似乎很少,或者我只是在寻找错误的地方.

关于解决原始问题或当前问题的任何想法/指示?

c usb datetime date hsm

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

当值为"null"时,Jackson忽略自定义字段反序列化器

我为杰克逊为某个领域编写了一个自定义反序列化程序(如下).我用这个注释使用它:

@JsonDeserialize(using = TokenTypeDeserializer.class)
TokenType type;
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,只要我在字段中传递一个值.当我开始测试它时,我null以值为单位通过了该字段.在这种情况下,它忽略了我的自定义反序列化器,跳过它并将其null作为值.这是一个问题,因为当我进入null那个领域时,我有一种独特的行动方式.

当值为时,如何强制它通过我的自定义反序列化程序null

这是我写的自定义反序列化器:

public static class TokenTypeDeserializer extends StdDeserializer<TokenType> {

    public TokenTypeDeserializer() {
        this(null);
    }

    protected TokenTypeDeserializer(Class<?> vc) {
        super(vc);
    }

    @Override
    public TokenType deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        ObjectCodec oc = p.getCodec();
        JsonNode node = oc.readTree(p);
        String type = node.asText();

        TokenType tokenType = TokenType.getTokenTypeFromString(type);
        return tokenType;
    }
}
Run Code Online (Sandbox Code Playgroud)

我看了一下ObjectMapper代码,看到了这个:

public final Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException
{
    JsonToken t …
Run Code Online (Sandbox Code Playgroud)

java json jackson deserialization objectmapper

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