gpt4 book ai didi

Java android - 静态类中的私有(private)构造函数不会被调用

转载 作者:行者123 更新时间:2023-11-29 19:12:55 28 4
gpt4 key购买 nike

我正在使用您可以在下面找到的静态类,但是由于某种原因,当我使用类 getEmail(){... 方法时,我得到了异常:

java.lang.RuntimeException: 无法启动 Activity ComponentInfo{com.techsolutions.appgrade/com.techsolutions.appgrade.View.RegisterActivity}: java.lang.NullPointerException: 尝试调用接口(interface)方法 'boolean android.content.SharedPreferences .contains(java.lang.String)' 在空对象引用上

看起来私有(private)构造函数没有被调用。

这是我的静态类:

package com.techsolutions.appgrade.Logic;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;

import org.apache.commons.validator.routines.EmailValidator;

public final class DataController extends Application{

private static SharedPreferences sharedPref;
private static SharedPreferences.Editor editor;
private static Context context;

private static boolean isRegistered;

private static String PREF_NAME = "StudentSharedPref";
private static String KEY_Name = "name";
private static String KEY_Email = "email";
private static String KEY_PhoneNum = "phoneNum";
private static String KEY_Age = "age";
private static String KEY_Realm = "age";

public static DataController instance;

private DataController()
{
System.out.println("Been HERE");
sharedPref = context.getSharedPreferences(PREF_NAME, Activity.MODE_PRIVATE);
editor = sharedPref.edit();
context = getApplicationContext();

isRegistered = false;
}

public static void setName(String name)
{
editor.putString(KEY_Name, name);
editor.apply();
}

public static String getName(){
if(sharedPref.contains(KEY_Name))
{
return sharedPref.getString(KEY_Name, "");
}
return "";
}

public static boolean setEmail(String email)
{
if(!EmailValidator.getInstance().isValid(email))
return false;

editor.putString(KEY_Email, email);
editor.apply();
return true;
}

public static String getEmail(){
if(sharedPref.contains(KEY_Email))
{
return sharedPref.getString(KEY_Email, "");
}
return "";
}

public static boolean setPhonNum(String phoneNum)
{
if(String.valueOf(phoneNum).length() == 10)
return false;

editor.putString(KEY_PhoneNum, phoneNum);
editor.apply();
return true;
}

public static String getPhoneNum(){
if(sharedPref.contains(KEY_PhoneNum))
{
return sharedPref.getString(KEY_PhoneNum, "");
}
return "";
}

public static boolean setAge(int age)
{
if(age <= 0 || age>120)
return false;

editor.putInt(KEY_Age, age);
editor.apply();
return true;

}

public static String getAge(){
if(sharedPref.contains(KEY_Age))
{
return sharedPref.getString(KEY_Age, "");
}
return "";
}

public static void setRealm(String realm)
{
editor.putString(KEY_Realm, realm);
editor.apply();
}

public static String getRealm(){
if(sharedPref.contains(KEY_Realm))
{
return sharedPref.getString(KEY_Realm, "");
}
return "";
}
}

这就是我从另一个类调用方法的方式:

DataController.setEmail(email)

最佳答案

您没有调用您的构造函数。您的构造函数是私有(private)的。它不能从你的课外调用。您正在尝试创建一个单例。您忘记了单例中的 newInstance 方法。

public static DataController newInstance(){
if(instance == nul){
instance = new DataController();
}
return instance;
}

之后你可以调用

DataController dataController = DataController.newInstance();

初始化您的类,或获取您的类的现有实例。

此外,我不建议在这种情况下扩展您的应用程序类,因为您需要能够访问上下文。您可以添加一个 Context 变量,您可以在调用 newInstance 方法后设置该变量。

关于Java android - 静态类中的私有(private)构造函数不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44597763/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com