Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中使用ormlite实现单例模式_Java_Android_Oop_Design Patterns_Ormlite - Fatal编程技术网

Java 如何在Android中使用ormlite实现单例模式

Java 如何在Android中使用ormlite实现单例模式,java,android,oop,design-patterns,ormlite,Java,Android,Oop,Design Patterns,Ormlite,我一直在Android中测试各种orm,以便在我目前开发的应用程序中进行对象关系映射 我制作了一个类图,发现在一些类中实现单例模式很有用 正如Singleton模式所述,Singleton类必须使类的构造函数私有,以强制类的唯一实例 从ORMlite帮助页面可以看出这一点: 2.1.3添加无参数构造函数 添加类和字段注释后,还将 需要添加至少包含一个包的无参数构造函数 能见度。当从查询返回对象时,ORMLite 使用Java反射构造对象,构造函数需要 被叫来 如何使用ORMLite实现此模式?我

我一直在Android中测试各种orm,以便在我目前开发的应用程序中进行对象关系映射

我制作了一个类图,发现在一些类中实现单例模式很有用

正如Singleton模式所述,Singleton类必须使类的构造函数私有,以强制类的唯一实例

从ORMlite帮助页面可以看出这一点:

2.1.3添加无参数构造函数

添加类和字段注释后,还将 需要添加至少包含一个包的无参数构造函数 能见度。当从查询返回对象时,ORMLite 使用Java反射构造对象,构造函数需要 被叫来

如何使用ORMLite实现此模式?我将给出一个示例:

类ColectorPrincipal表示我的应用程序的用户,因为当时只有一个人在使用该应用程序。我想确保这个类在当时只有一个实例

public class ColectorPrincipal extends Persona {

    @DatabaseField(index=true)
    private String numeroColeccionActual;
    private static ColectorPrincipal colectorPrincipal;
    @DatabaseField(generatedId=true)
    private int colectorPrincipalID;
    @DatabaseField(foreign=true)
    private ArrayList<Viaje> viajes;
    @DatabaseField(foreign=true)
    private ArrayList<Proyecto> proyectos;
    @DatabaseField
    private int tipoCapturaDatos;

    /**
     * 
     * @param usuario
     * @param contraseña
     */
    private ColectorPrincipal(String usuario, String contraseña){
        super(usuario, contraseña);
        setusuario(new Usuario(usuario, contraseña));
    }

    /**
     * 
     * @param usuario
     * @param contraseña
     */
    public static ColectorPrincipal getColectorPrincipal(String usuario, String contraseña){
        if (colectorPrincipal == null) {
            colectorPrincipal=new ColectorPrincipal(usuario, contraseña);
        }
        return colectorPrincipal;
    }
...

}

是否可以使用singleton方法使ORMLite实例化类trugetColectorPrincipal

我不能100%确定我是否理解您的要求

我制作了一个类图,发现在一些类中实现单例模式很有用

将数据库实体设置为单例是没有意义的。如果从数据库中获取,则需要实例化
ColectorPrincipal
的实例

这是我的一个单例类,我想让它持久化,它代表我的应用程序的一个用户

所以在整个JVM中只有一个用户?我不明白

如果要从数据库中检索单元格,可以考虑包装类。包装类将强制执行单例,但它将使用另一个实体从数据库初始化它的信息

我不确定它是否有用,但的一个较新功能是支持
ObjectFactory
,它可以是。此工厂允许您控制对象的实例化。这是你的电话号码

是否可以在没有公共构造函数的情况下使用ORMLite

构造函数不必是公共的。我相信包特权是有效的

编辑:

听起来你想要的是一次登录一个用户。
我只是在用户登录时在表中创建一个
UserLogin
实例,然后在用户注销时将其删除。然后当用户登录时,您可以查看
UserLogin
表中是否有任何有效条目。

我将尝试解释我自己,我的Android一次只有一个用户,用户可以注销,然后其他用户可以登录,但一次只有一个。因此,我将应用singleton模式,以确保只能生成该类的1个实例。此模式的目的是确保仅在应用程序运行时创建类的实例。然后,我只需在表中创建
UserLogin
的实例,该实例将在用户注销时删除。然后,当用户登录时,您可以查看
UserLogin
表中是否有任何有效条目(我对问题进行了一点编辑)。您建议我创建一个表UserLogin来存储登录的用户?并在用户注销时删除该行?是@dhampir。那很好。或者将
userLogin.setActive标记为false或其他内容并更新它。然后,您的代码可以查找活动登录,如果其他人仍在登录,则会抛出一个错误。
public class Persona {

    @DatabaseField
    private String nombres;
    @DatabaseField
    private String apellidos;
    @DatabaseField
    private String direccion;
    @DatabaseField
    private String telefono;
    @DatabaseField
    private String institucion;
    private Usuario usuario;

    public Persona(){

    }
    /**
     * 
     * @param apellidos
     * @param nombres
     */
    public Persona(String apellidos, String nombres){

    }
    ...
}