android - 如何解决 - 尝试在空对象引用上调用虚拟方法 'void android.app.ProgressDialog.dismiss()'

标签 android firebase-realtime-database progressdialog dismiss

我是初学者,我不知道大部分 Android 范式,请帮忙!!

抱歉!!如果有人发现这个问题重复。

我在加载 Spinner 期间遇到 ProgressDialog 因空引用而被忽略的问题。

在断开连接和重新连接到互联网期间发生一次,但在断开连接之前一切正常,即当 Spinner 中有东西时加载停止

我已经使用 if() 语句将 dismiss() 方法设置为在 Spinner 中有内容时执行,但我不知道在 Spinner 中找到某些内容之前它是如何执行的,我什至设置了一个 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 - 如何解决 - 尝试在空对象引用上调用虚拟方法 'void android.app.ProgressDialog.dismiss()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55958936/

相关文章:

android - 在 Paypal 集成中禁用信用卡支付选项

android - 单击按钮开始图像幻灯片

java - Android 后退按钮导致 Bad Keycharmap 警告

android - ProgressDialog 没有显示在我的 ListActivity 的 onListItemClick 方法中

android - Android 中如何获取用户的当前位置

android - 使用 15.0.0 版本以上的 FireStore 会导致错误

firebase - 初始化对象以显示在我的脚手架中

javascript - 这怎么能等到更新完才移到下一项呢?

java - Firebase 数据检索 java

android - 如何在屏幕旋转时使用 ProgressBar 处理 Android LiveData(ViewModel)?