将类型转换器与 Room 一起使用时出现 StackOverFlow 错误

StackOverFlow Error When Using Type Converter with Room

我正在与 TheMovieDatabase 交互 API,发现 here

我正在尝试拉取流行度字段,它是对象类型Number

Room 需要此对象的类型转换器,我在下面集成了它:

public class NumberConverter {

@TypeConverter
public static Number toNumber(Integer integer){
    return integer == null ? null : toNumber(integer); }


@TypeConverter
public static Integer toInt(Number number){
    return number == null ? null : number.intValue();
  }


}

当我加载我的应用程序时,我立即收到引用此行的 Whosebug 错误:

        return number == null ? null : number.intValue();

注意:我也在使用Executors异步处理读写:

public class AppExecutors{

//for Singleton Instantiation
private static final Object LOCK = new Object();
private static AppExecutors sInstance;
private final Executor diskIO;
private final Executor mainThread;
private final Executor networkIO;

public AppExecutors(Executor diskIO, Executor mainThread, Executor networkIO) {
    this.diskIO = diskIO;
    this.mainThread = mainThread;
    this.networkIO = networkIO;
}


public static AppExecutors getsInstance(){
    if (sInstance == null){
        synchronized (LOCK){
            sInstance = new AppExecutors(Executors.newSingleThreadExecutor(),
                    Executors.newFixedThreadPool(3),
                    new MainThreadExecutor());
        }
    }
    return sInstance;
};

public Executor diskIO(){return diskIO;};
public Executor mainThread(){return mainThread;}
public Executor netWorkIO(){return networkIO;}

private static class MainThreadExecutor implements Executor{

    private android.os.Handler mainThreadHandler = new android.os.Handler(Looper.getMainLooper());

    @Override
    public void execute(@NonNull Runnable runnable) {
        mainThreadHandler.post(runnable);
    }
   }



}

编辑:参考 TheMovieDatabase 文档

你能在你的代码中检查这个函数吗:

@TypeConverter public static Number toNumber(Integer integer){ return integer == null ? null : toNumber(integer); }

你有无限的 recursion 在这里进行,也许这就是你得到 WhosebugError 的原因。