如何解决 Singelton is NULL 问题
How can I solve Singelton is NULL problem
我正在尝试建立一个学生注册系统,并将这些学生保存在 firestore 中。我不希望它在添加学生时添加相同编号的学生,为此,我创建了一个单身人士 class。这个单例 class 有一个标志值。如果 firestore 中有相同编号的学生,我使用此标志提供控制。
但它始终 returns 为空。没看懂。
我只是分享必要的代码。
我加学生class
private ActivityOgrenciEkleBinding binding;
private FirebaseFirestore mFirestore = FirebaseFirestore.getInstance();
private LinkedHashMap<String,String> linkedHashMap;
private OgrenciyiKontrolEt ogrenciyiKontrolEt;
Singleton singleton;
public void init(){
linkedHashMap = new LinkedHashMap<>();
singleton = Singleton.getInstance();
btn_Ogrenci_EKLE();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityOgrenciEkleBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
init();
}
public void btn_Ogrenci_EKLE(){
binding.btnEkleOgrenci.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
String email_ogr = binding.emailOgrenci.getText().toString();
String ad_ogr = binding.isimOgrenci.getText().toString();
String soyisim_ogr = binding.soyisimOgrenci.getText().toString();
String no_ogr = binding.numaraOgrenci.getText().toString();
String parola_ogr = binding.sifreOgrenci.getText().toString();
ogrenciyiKontrolEt = new
OgrenciyiKontrolEt(no_ogr,OgrenciEkleActivity.this);// I
//created object from
//control class to check students
if(email_ogr.equals("") || ad_ogr.equals("") || soyisim_ogr.equals("") || no_ogr.equals("") || parola_ogr.equals("")){
AlertDialog.Builder builder = new AlertDialog.Builder(OgrenciEkleActivity.this);
builder.setTitle("UYARI !");
builder.setMessage("Boş alan bırakmayınız !");
builder.setIcon(R.drawable.warningicon);
builder.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
else{
ogrenciyiKontrolEt.OGR_KONTROL();
System.out.println("singleton get flag"+singleton.getflag()); //singleton returns null here and and it never
//goes into the if loop
if("100".equals(singleton.getflag())){
AlertDialog.Builder builder = new AlertDialog.Builder(OgrenciEkleActivity.this);
builder.setIcon(R.drawable.warningicon);
builder.setMessage(no_ogr+" numaralı öğrenci zaten kayıtlı lütfen farklı bir numara giriniz.");
builder.setTitle("UYARI");
builder.setPositiveButton("TAMAM", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
else{
linkedHashMap.put("name",ad_ogr);
linkedHashMap.put("lastname",soyisim_ogr);
linkedHashMap.put("number",no_ogr);
linkedHashMap.put("email",email_ogr);
linkedHashMap.put("password",parola_ogr);
mFirestore.collection("Students").add(linkedHashMap).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(@NonNull DocumentReference documentReference) {
Toast toast = Toast.makeText(OgrenciEkleActivity.this,"Öğrenci başaralı bir şekilde eklendi.",Toast.LENGTH_LONG);
toast.show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast toast = Toast.makeText(OgrenciEkleActivity.this,"Öğrenci eklerken bir hata ile karşılaşıldı.",Toast.LENGTH_LONG);
toast.show();
}
});
}
}
}
});
}
控制class我创建的控制学生
public class OgrenciyiKontrolEt {
protected String ogrenci_no;
protected String firestore_ogr_no;
protected FirebaseFirestore firebaseFirestoreDb = FirebaseFirestore.getInstance();
public Context context;
Singleton singleton = Singleton.getInstance();
public OgrenciyiKontrolEt(String ogr_no,Context context){
this.ogrenci_no = ogr_no;
this.context = context;
}
public void OGR_KONTROL(){
firebaseFirestoreDb.collection("Students")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(@NonNull QuerySnapshot queryDocumentSnapshots) {
List<DocumentSnapshot> snapshotList = queryDocumentSnapshots.getDocuments();
for(DocumentSnapshot snapshot: snapshotList ) {
firestore_ogr_no = snapshot.getString("number");
if(firestore_ogr_no.equals(ogrenci_no)) {
singleton.setflag("100"); //If there is a student with the same
number, I set the flag in the singleton to 100.
}
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast toast = Toast.makeText(context,"Bir hata ile karşılaşıldı.",Toast.LENGTH_LONG);
toast.show();
}
});
}
}
我的单身狗class
public class Singleton {
**EDIT**
private String flag="1";
**EDIT**
private static Singleton singleton;
private Singleton() {
}
public String getflag() {
return flag;
}
public void setflag(String flag) {
this.flag = flag;
}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
你的标志在你调用它时没有被初始化,要么将一些东西设置为默认值,要么在构造函数中初始化,比如
private Singleton() {
this.flag = "";
}
或在第一次出现 getFalg
之前致电您的 setFlag
我正在尝试建立一个学生注册系统,并将这些学生保存在 firestore 中。我不希望它在添加学生时添加相同编号的学生,为此,我创建了一个单身人士 class。这个单例 class 有一个标志值。如果 firestore 中有相同编号的学生,我使用此标志提供控制。
但它始终 returns 为空。没看懂。
我只是分享必要的代码。
我加学生class
private ActivityOgrenciEkleBinding binding;
private FirebaseFirestore mFirestore = FirebaseFirestore.getInstance();
private LinkedHashMap<String,String> linkedHashMap;
private OgrenciyiKontrolEt ogrenciyiKontrolEt;
Singleton singleton;
public void init(){
linkedHashMap = new LinkedHashMap<>();
singleton = Singleton.getInstance();
btn_Ogrenci_EKLE();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityOgrenciEkleBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
init();
}
public void btn_Ogrenci_EKLE(){
binding.btnEkleOgrenci.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
String email_ogr = binding.emailOgrenci.getText().toString();
String ad_ogr = binding.isimOgrenci.getText().toString();
String soyisim_ogr = binding.soyisimOgrenci.getText().toString();
String no_ogr = binding.numaraOgrenci.getText().toString();
String parola_ogr = binding.sifreOgrenci.getText().toString();
ogrenciyiKontrolEt = new
OgrenciyiKontrolEt(no_ogr,OgrenciEkleActivity.this);// I
//created object from
//control class to check students
if(email_ogr.equals("") || ad_ogr.equals("") || soyisim_ogr.equals("") || no_ogr.equals("") || parola_ogr.equals("")){
AlertDialog.Builder builder = new AlertDialog.Builder(OgrenciEkleActivity.this);
builder.setTitle("UYARI !");
builder.setMessage("Boş alan bırakmayınız !");
builder.setIcon(R.drawable.warningicon);
builder.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
else{
ogrenciyiKontrolEt.OGR_KONTROL();
System.out.println("singleton get flag"+singleton.getflag()); //singleton returns null here and and it never
//goes into the if loop
if("100".equals(singleton.getflag())){
AlertDialog.Builder builder = new AlertDialog.Builder(OgrenciEkleActivity.this);
builder.setIcon(R.drawable.warningicon);
builder.setMessage(no_ogr+" numaralı öğrenci zaten kayıtlı lütfen farklı bir numara giriniz.");
builder.setTitle("UYARI");
builder.setPositiveButton("TAMAM", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
else{
linkedHashMap.put("name",ad_ogr);
linkedHashMap.put("lastname",soyisim_ogr);
linkedHashMap.put("number",no_ogr);
linkedHashMap.put("email",email_ogr);
linkedHashMap.put("password",parola_ogr);
mFirestore.collection("Students").add(linkedHashMap).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(@NonNull DocumentReference documentReference) {
Toast toast = Toast.makeText(OgrenciEkleActivity.this,"Öğrenci başaralı bir şekilde eklendi.",Toast.LENGTH_LONG);
toast.show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast toast = Toast.makeText(OgrenciEkleActivity.this,"Öğrenci eklerken bir hata ile karşılaşıldı.",Toast.LENGTH_LONG);
toast.show();
}
});
}
}
}
});
}
控制class我创建的控制学生
public class OgrenciyiKontrolEt {
protected String ogrenci_no;
protected String firestore_ogr_no;
protected FirebaseFirestore firebaseFirestoreDb = FirebaseFirestore.getInstance();
public Context context;
Singleton singleton = Singleton.getInstance();
public OgrenciyiKontrolEt(String ogr_no,Context context){
this.ogrenci_no = ogr_no;
this.context = context;
}
public void OGR_KONTROL(){
firebaseFirestoreDb.collection("Students")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(@NonNull QuerySnapshot queryDocumentSnapshots) {
List<DocumentSnapshot> snapshotList = queryDocumentSnapshots.getDocuments();
for(DocumentSnapshot snapshot: snapshotList ) {
firestore_ogr_no = snapshot.getString("number");
if(firestore_ogr_no.equals(ogrenci_no)) {
singleton.setflag("100"); //If there is a student with the same
number, I set the flag in the singleton to 100.
}
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast toast = Toast.makeText(context,"Bir hata ile karşılaşıldı.",Toast.LENGTH_LONG);
toast.show();
}
});
}
}
我的单身狗class
public class Singleton {
**EDIT**
private String flag="1";
**EDIT**
private static Singleton singleton;
private Singleton() {
}
public String getflag() {
return flag;
}
public void setflag(String flag) {
this.flag = flag;
}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
你的标志在你调用它时没有被初始化,要么将一些东西设置为默认值,要么在构造函数中初始化,比如
private Singleton() {
this.flag = "";
}
或在第一次出现 getFalg
setFlag