如何解决 - 尝试在空对象引用上调用虚方法 'void android.app.ProgressDialog.dismiss()'
how to solve - Attempt to invoke virtual method 'void android.app.ProgressDialog.dismiss()' on a null object reference
我是初学者,我不了解大部分 Android 范式 请帮忙!!
对不起!!如果有人发现这个问题是重复的。
我在加载 Spinner
.
时遇到 ProgressDialog
在空引用上解雇的问题
它在断开和重新连接到 Internet 期间发生一次,但在断开连接之前一切正常,即当 Spinner
中有内容时加载停止
我已经使用if()
语句将dismiss()
方法设置为当Spinner
中有东西时执行,但我不知道它在找到东西之前是如何执行的在 Spinner
中,我什至设置了一个 Regex
,这样当它与 Regex
匹配时对话框应该被关闭,即使在这之后对话框仍然会关闭。
Here's my code
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spingroup = (Spinner) findViewById(R.id.spingrp);
if(Connection.isConn(this)) {
Toast.makeText(this, "No internet connection detected, please check your internet connection", Toast.LENGTH_SHORT).show();
AlertDialog alertDog = new AlertDialog.Builder(this).create();
alertDog.setTitle("No Internet!!");
alertDog.setMessage("Please connect to internet & try again");
alertDog.setIcon(R.drawable.no_internet);
alertDog.setCanceledOnTouchOutside(false);
alertDog.setButton("Exit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
alertDog.show();
}
if (!Connection.isConn(this)){
progress = ProgressDialog.show(MainActivity.this, "Loading Group","Please wait!!", true);
progress.setCancelable(true);
progress.setIcon(R.drawable.list_icon);
}
//Yes this if() statement gets called before the null reference error
dbrefspingrp = FirebaseDatabase.getInstance().getReference();
dbrefspingrp.child("2018-19").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final List<String> listgrp = new ArrayList<String>();
listgrp.add("--Select Group--");
for (DataSnapshot grpsnap: dataSnapshot.getChildren()){
String group = grpsnap.getKey();
listgrp.add(group);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item,listgrp );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.notifyDataSetChanged();
spingroup.setAdapter(adapter);
String test = listgrp.get(listgrp.size()-1);
boolean reg = Pattern.matches("(?i)group no [0-9]{2}", test);
if (reg == true) {
progress.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
My Attempts
1-
if (spingroup.getSelectedItem().toString().equals("--Select Group--")) {
progress.dismiss();
}
2-
if (!spingroup.getSelectedItem().toString().equals(null)) {
progress.dismiss();
}
3-
if (spingroup.getSelectedItem().toString().equals("--Select Group--") && spingroup.getSelectedItem.toString != (null) {
progress.dismiss();
}
你的问题是 ProgressDialog
进度是 null
。可能是因为这部分代码从未被调用(或者至少在您尝试访问 ProgressDialog 之前没有被调用):
if (!Connection.isConn(this)){
progress = ProgressDialog.show(MainActivity.this, "Loading Group","Please wait!!", true);
progress.setCancelable(true);
progress.setIcon(R.drawable.list_icon);
}
您可以通过在访问之前检查您的 ProgressDialog
来避免异常:
if (progress != null && progress.isShowing()) {
progress.dismiss();
}
我是初学者,我不了解大部分 Android 范式 请帮忙!!
对不起!!如果有人发现这个问题是重复的。
我在加载 Spinner
.
ProgressDialog
在空引用上解雇的问题
它在断开和重新连接到 Internet 期间发生一次,但在断开连接之前一切正常,即当 Spinner
我已经使用if()
语句将dismiss()
方法设置为当Spinner
中有东西时执行,但我不知道它在找到东西之前是如何执行的在 Spinner
中,我什至设置了一个 Regex
,这样当它与 Regex
匹配时对话框应该被关闭,即使在这之后对话框仍然会关闭。
Here's my code
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spingroup = (Spinner) findViewById(R.id.spingrp);
if(Connection.isConn(this)) {
Toast.makeText(this, "No internet connection detected, please check your internet connection", Toast.LENGTH_SHORT).show();
AlertDialog alertDog = new AlertDialog.Builder(this).create();
alertDog.setTitle("No Internet!!");
alertDog.setMessage("Please connect to internet & try again");
alertDog.setIcon(R.drawable.no_internet);
alertDog.setCanceledOnTouchOutside(false);
alertDog.setButton("Exit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
alertDog.show();
}
if (!Connection.isConn(this)){
progress = ProgressDialog.show(MainActivity.this, "Loading Group","Please wait!!", true);
progress.setCancelable(true);
progress.setIcon(R.drawable.list_icon);
}
//Yes this if() statement gets called before the null reference error
dbrefspingrp = FirebaseDatabase.getInstance().getReference();
dbrefspingrp.child("2018-19").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final List<String> listgrp = new ArrayList<String>();
listgrp.add("--Select Group--");
for (DataSnapshot grpsnap: dataSnapshot.getChildren()){
String group = grpsnap.getKey();
listgrp.add(group);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item,listgrp );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.notifyDataSetChanged();
spingroup.setAdapter(adapter);
String test = listgrp.get(listgrp.size()-1);
boolean reg = Pattern.matches("(?i)group no [0-9]{2}", test);
if (reg == true) {
progress.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
My Attempts
1-
if (spingroup.getSelectedItem().toString().equals("--Select Group--")) {
progress.dismiss();
}
2-
if (!spingroup.getSelectedItem().toString().equals(null)) {
progress.dismiss();
}
3-
if (spingroup.getSelectedItem().toString().equals("--Select Group--") && spingroup.getSelectedItem.toString != (null) {
progress.dismiss();
}
你的问题是 ProgressDialog
进度是 null
。可能是因为这部分代码从未被调用(或者至少在您尝试访问 ProgressDialog 之前没有被调用):
if (!Connection.isConn(this)){
progress = ProgressDialog.show(MainActivity.this, "Loading Group","Please wait!!", true);
progress.setCancelable(true);
progress.setIcon(R.drawable.list_icon);
}
您可以通过在访问之前检查您的 ProgressDialog
来避免异常:
if (progress != null && progress.isShowing()) {
progress.dismiss();
}