小编Tra*_*ace的帖子

FragmentManager 后台堆栈

我对 FragmentManager 的后台堆栈背后的基本原理有些困惑。

鉴于一个活动有两个容器来容纳不同的片段:问题是当使用片段事务将片段添加到两个容器时,无论使用哪个容器,backstack 的计数都会增加。

这对我来说真的没有意义。如果这不是在 Android 中执行此操作的推广方式,那么我们如何在同一活动中独立管理 2 个后台堆栈(每个活动只有一个 FragmentManager)?
我可能只是在这里遗漏了一些明显的东西。

android

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

ant不支持的major.minor版本52.0

这让我疯了.
运行任何ant命令(偶数ant -version)时,我总是在Mac OSX上收到以下错误:

线程"main"中的异常java.lang.UnsupportedClassVersionError:org/apache/tools/ant/launch/Launcher:不支持的major.minor版本52.0

我完全删除并重新安装了ant,但仍然遇到同样的错误.

在此输入图像描述

对于我们公司,我们必须运行Java7来运行命令,因此我创建了一个别名.

这曾经工作过,我不确定是什么改变了.

ant

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

Redis 直写式缓存

我一直在研究如何可靠地实现直写式缓存机制来存储实时数据。

基本上我们需要的是这样的:

Save data to Redis -> Save to database (underlying)  
Read data from Redis <- Read from database in case unavailable in cache  
Run Code Online (Sandbox Code Playgroud)

帮助实施此缓存策略的在线资源似乎很少。

问题是:

1)Redis 和数据库(在我的例子中为 Mongo)之间没有内置事务的可能性。
2)没有事务意味着对底层数据库的写入是不可靠的。

我认为实现这一点的最直接方法是使用像 Kafka 这样的代理,并将消息放在持久队列上以便稍后处理。
因此,Kafka 将成为可靠处理的负责实体。

另一种方法是在调度程序中使用自定义实现来检查 Redis 数据库是否有脏记录。乍一看,这种方法似乎需要一些权衡,如果可能的话,我希望不必走这条路。

我正在寻找一些关于如何以其他方式实现这一点的选项。
或者这实际上是否是最可行的方法。

java caching redis apache-kafka

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

React Suspense 延迟加载,无需回退

我想延迟加载我的组件以减少我的初始包大小并使用 react router 使用代码拆分来动态获取组件。

但是,在使用 React Suspense 时,它​​们会强制您使用回退进行加载。
这行不通:

const lazyLoadComponent = Component =>
    props => (
        <Suspense> // Missing fallback property
            <Component {...props} />
        </Suspense>
    );
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我从服务器渲染 html,所以我不想使用微调器。
这会在我的屏幕上产生无用的闪烁!IE:

  • html 加载
  • 占位符出现
  • 路由的 PageComponent 被加载
  • 我有自己的微调器,可以从页面组件中加载提要

在我的情况下,html 对应于加载的 react 组件。

是否有任何已知的 hack 可以轻松解决此问题(除了为复制 html (!!) 的任何路由创建加载程序,顺便说一下,这会使延迟加载无用)。

我对“强迫”我们添加加载器有点不满意,我不明白强制执行的决定背后的逻辑。

javascript reactjs react-router react-suspense

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

ES6类/实例属性

这将是一个相对较长的问题,但我真的很想理解.最后的问题在问题的底部提出.

我已经阅读了这个问题的答案:
ES6类可变替代品

关于为什么在ES6中不接受这种语法的问题:

class MyClass {
    const MY_CONST = 'string';
    constructor(){
        this.MY_CONST;
    }
}
Run Code Online (Sandbox Code Playgroud)

1)第一个答案提到:

请记住,类定义定义了原型方法 - 在原型上定义变量通常不是你做的事情.

我不明白这个; 基于类的语言中的静态变量似乎与JS中原型上定义的属性具有相同的目的.
显然不是像人名这样的实例变量,但它可以是车辆的默认MAX_SPEED,或者是所有实例共享的计数器.如果实例未覆盖原型的MAX_SPEED,则返回默认值.这不是静态变量的确切目的吗?

2)以下帖子(ES6规范提案)制定:

(故意)没有直接声明方式来定义原型数据属性(方法除外)类属性或实例属性.需要在声明之外创建类属性和原型数据属性.

我没有看到在类本身(构造函数之外)中使用默认值声明/初始化实例/类变量的实际区别?如果它在原型上有什么关系?如果它涉及一个具有默认值的实例变量,该默认值可能适用于所有实例(但仍可覆盖),我看不出有什么问题.那究竟是什么意思呢?

3)关于ES6类变量替代问题的第二个答案让我感到困惑(尽管不是技术专家).

从类方法中可以将变量作为this.constructor.foo(或MyClass.foo)访问 .

通常无法从类实例访问这些类属性.即MyClass.foo让"酒吧",但new MyClass().fooundefined

这表明显然可以在类(或底层函数)上声明一个类变量,如本例所示:http://www.es6fiddle.net/iehn0hxp/

class Car{
  constructor(){
    //Set instance variable 
    this.instance_var = 220; 
    //Set class variable 
    this.constructor.class_var = 240; 
  }
}

var Mercedes = new Car(); 
var Audi = new Car(); 

//Instance property 
console.log(Mercedes.instance_var); //220 
//Class property …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

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

最终类的编译器错误实例

以下代码编译正常:

interface Flyer{ }
class Bat { }

public class App {

    public static void main(String[] args) { 
        Bat b = new Bat();
        if(b instanceof Flyer) System.out.println("b is a Bird");
    }

} 
Run Code Online (Sandbox Code Playgroud)

如果我们创建Batfinal,代码不会编译:

final class Bat { } 
Run Code Online (Sandbox Code Playgroud)

如果最终的类实现Flyer,它编译好:

final class Bat implements Flyer { } 
Run Code Online (Sandbox Code Playgroud)

有人在乎解释这背后的逻辑吗?

java

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

Java静态方法所需的实现

我必须完成的任务已经完成,但是我仍然想着一个问题。

我定义了以下接口:

package dao;

import java.sql.SQLException;

/**
 * Get / save / delete a single instance from the db in RESTful fashion on the object
 * @author kimg
 *
 * @param <T>
 */
public interface IDao<T> {

    public void fetch(int id); 
    public void save() throws SQLException; 
    public void delete() throws SQLException; 

} 
Run Code Online (Sandbox Code Playgroud)

Purpose is to have all pojo's that are represented as database table entities implement these methods, so the user of the pojo's knows how to handle instances according …

java static

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

Dagger2 自定义范围和销毁组件

据我了解,在定义组件和模块的范围时,(@) 提供的实例将存在,只要暴露它们的组件存在。

更具体地说,在@User 作用域组件的情况下,我们可以删除@provided 对象(由模块提供),当用户注销时,这些对象填充了用户特定的数据。当新用户登录时,我们应该创建一个新的 Dagger 组件,该组件依次公开将使用(新登录的)用户特定数据填充的对象。只要组件在注销时未被破坏,这些对象就会依次保持活动状态。

我的问题很简单,我们如何在注销时销毁(子)组件?
我们只是将组件设置为 null 以便它可以被垃圾收集,并通过构建器手动创建一个新组件就足够了吗?

android dagger-2

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

Lagom 调试器 Intellij

我无法让调试器工作。重现步骤:

1) sbt lagom:runAll

在此处输入图片说明

2) sbt -jvm-debug 5005

在此处输入图片说明

3)在Intellij中设置远程配置+开始调试

在此处输入图片说明

在此处输入图片说明

4) 设置断点

在此处输入图片说明

5) 提出要求

在此处输入图片说明

调试器不会在断点处停止。
这里有什么问题?

debugging intellij-idea lagom

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

Firebase:无法验证 Firebase ID 令牌的签名

当我尝试在 Spring Boot 后端应用程序中验证 Firebase jwt 令牌时,出现以下错误:

无法验证 Firebase ID 令牌的签名。有关如何检索 ID 令牌的详细信息,请参阅 https://firebase.google.com/docs/auth/admin/verify-id-tokens 。

在客户端(Flutter)中,我按如下方式记录 jwt:

  GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
  GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication;

  AuthCredential credential = GoogleAuthProvider.credential(
    accessToken: googleSignInAuthentication.accessToken,
    idToken: googleSignInAuthentication.idToken,
  );

  UserCredential authResult = await _auth.signInWithCredential(credential);
  _user = authResult.user;

  logger.i(await _user.getIdToken()); // Print jwt
Run Code Online (Sandbox Code Playgroud)

我通过授权标头将记录到后端的 jwt 作为不记名令牌发送。

使用 Spring security(没关系),我只需执行以下检查:

FirebaseToken decoded = FirebaseAuth.getInstance().verifyIdToken(token);
Run Code Online (Sandbox Code Playgroud)

我的 firebase 应用程序初始化配置非常标准(设置了指向 config.json 的 env 变量):

@Primary
@Bean
public void firebaseInit() throws IOException {
    FirebaseOptions options = FirebaseOptions.builder()
            .setCredentials(GoogleCredentials.getApplicationDefault())
            .build(); …
Run Code Online (Sandbox Code Playgroud)

java firebase spring-boot firebase-authentication flutter

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