私有构造函数和android.app.Instrumentation问题

时间:2016-01-17 14:43:21

标签: java android singleton

在我的应用程序中,我已经将Token类实现为单例来处理用户的身份。但是,当我启动我的应用程序时,它失败并出现以下错误:

  

java.lang.RuntimeException:无法实例化应用程序   appliflo.Token:java.lang.IllegalAccessException:private   无法从类访问appliflo.Token()   android.app.Instrumentation

我想知道天气可能是由于Application类的继承。

这是我的单身人士:

package appliflo;
import android.app.Application;

public final class Token extends Application{

    private static long TokenID;
    private static Token instance;

    private Token(){

    }

    private Token(long TokenID){    
        this.TokenID = TokenID;
    }

    public static synchronized Token getToken() { 
        if (instance == null) instance = new Token();
        return instance;   
    }

    public static synchronized void setToken(long id){
        if (instance == null) instance = new Token(id);
        instance.TokenID = id; 
    }

    public long getTokenID(){    
        return this.TokenID;
    }

}

1 个答案:

答案 0 :(得分:0)

由于您的异常消息指出类android.app.Instrumentation无法创建应用程序的实例,因为它无法访问其构造函数,因为它是私有的。

您需要拥有一个没有参数的公共构造函数,以允许Android系统创建它的实例来启动您的应用程序。

您不会自己创建Token的实例,因此静态方法getTokensetToken将无用。

评论中的问题更新:

如果您需要更新tokenId更新,则get和set方法只更新long,而不是创建Token类的新实例。

public static synchronized long getToken() {
    return TokenID;
}

public static synchronized void setToken(long id){
    TokenID = id;
}