应用程序在 AlertDialog .show() 上崩溃 - 我找到了解决方案

问题描述 投票:0回答:3

我是新来的。 我正在构建一个应用程序,但每当涉及到 AlertDialog .show() 时,它都会崩溃。我在互联网上进行了研究,但找不到任何解决方案。我发现的大多数情况都通过更改“上下文”来解决问题 AlertDialog.Builder 示例 = new AlertDialog.Builder(Context) 到 AlertDialog.Builder 示例 = new AlertDialog.Builder(MyActivity.this);

但这不是我的情况,我一直在使用 MyActivity.this ,但仍然崩溃。

这是我的代码:

公共类 MainActivity 扩展 AppCompatActivity {

Button btMudaTela;

final Funcoes funcao = new Funcoes();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btMudaTela = (Button) findViewById(R.id.btMudaTela);

    //Ao clicar no botão outra activity será aberta (ActivityCadastro)
    btMudaTela.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
            adb.setTitle("teste");
            adb.setMessage("ok");
            adb.create().show();
            funcao.mudaActivity(MainActivity.this, ActivityCadastro.class);
            finish();
        }
    });

}

}

这是我设备上 Logcat 的日志:

06-23 07:41:42.113  3303  3303 E AndroidRuntime: Process: com.example.teste.projetofinal, PID: 3303

06-23 07:41:42.113  3303  3303 E AndroidRuntime:    at com.example.teste.projetofinal.MainActivity$1.onClick(MainActivity.java:46)

06-23 07:41:42.123   954  1367 W ActivityManager:   Force finishing activity com.example.teste.projetofinal/.MainActivity

06-23 07:41:43.334   954  1602 I ActivityManager: Process com.example.teste.projetofinal (pid 3303) (adj 9) has died.

06-23 07:41:43.334   954  1454 I WindowState: WIN DEATH: Window{444ca450 u0 com.example.teste.projetofinal/com.example.teste.projetofinal.MainActivity}

06-23 07:50:39.406  6806  6806 W InstallAppProgress: Replacing package:com.example.teste.projetofinal

06-23 07:50:42.219  5389  5389 I Finsky  : [1] com.google.android.finsky.verifier.impl.br.c(104): Verification complete: id=0, package_name=com.example.teste.projetofinal

06-23 07:50:42.960   954  1046 I PackageManager: Package com.example.teste.projetofinal codePath changed from /data/app/com.example.teste.projetofinal-19.apk to /data/app/com.example.teste.projetofinal-20.apk; Retaining data and using new

06-23 07:50:43.921   954  1046 W PackageManager: Code path for pkg : com.example.teste.projetofinal changing from /data/app/com.example.teste.projetofinal-19.apk to /data/app/com.example.teste.projetofinal-20.apk

06-23 07:50:43.921   954  1046 W PackageManager: Resource path for pkg : com.example.teste.projetofinal changing from /data/app/com.example.teste.projetofinal-19.apk to /data/app/com.example.teste.projetofinal-20.apk

06-23 07:50:45.592   954  1036 I CrashAnrDetector: onPackageUpdateFinished : com.example.teste.projetofinal

06-23 07:50:46.073  6987  6987 E dalvikvm: >>>>> com.example.teste.projetofinal [ userId:0 | appId:10200 ]

06-23 07:50:47.444  6987  6987 E AndroidRuntime: Process: com.example.teste.projetofinal, PID: 6987

06-23 07:50:47.444  6987  6987 E AndroidRuntime:    at com.example.teste.projetofinal.MainActivity$1.onClick(MainActivity.java:40)

06-23 07:50:47.444   954  1602 W ActivityManager:   Force finishing activity com.example.teste.projetofinal/.MainActivity

06-23 07:50:48.806   954  1602 I WindowState: WIN DEATH: Window{433e3670 u0 com.example.teste.projetofinal/com.example.teste.projetofinal.MainActivity}

06-23 07:50:48.836   954  1545 I ActivityManager: Process com.example.teste.projetofinal (pid 6987) (adj 9) has died.

06-23 07:50:51.188  3939  3939 E SPPClientService: [PackageInfoChangeReceiver] [handlePkgRemovedEvent] PackageName : com.example.teste.projetofinal, true, false

06-23 07:50:54.531  5389  5389 I Finsky  : [1] com.google.android.finsky.externalreferrer.d.run(9): Package state data is missing for com.example.teste.projetofinal

06-23 07:50:55.792  3498  7271 I FontsPackageChangeOp: Package com.example.teste.projetofinal has no metadata

是啊!!!!经过两天在互联网上的挖掘,我终于在这里找到了解决方案: 当 Android 支持库更新到 24 时,AlertDialog 构建器崩溃

您需要为您的 AlertDialog 导入此内容:

 import android.app.AlertDialog;

而不是这个:

 import android.support.v7.app.AlertDialog; 
android android-alertdialog
3个回答
0
投票

如果没有你的堆栈跟踪,要准确地找出问题有点困难,但是,我猜它与你的构建器有关。

你有这行:

AlertDialog.Builder alerta = new AlertDialog.Builder(ActivityCadastro.this);

然后您可以在对象上设置各种字段。快结束时,你打电话

alerta.show()

问题是,这不是您调用它的警报对话框,这是一个构建器对象。要解决此问题,您需要通过调用构建器上的 build 来实际创建警报对话框对象;只需将代码更改为以下内容:

alerta.create().show();

参考:https://developer.android.com/reference/android/app/AlertDialog.Builder.html

如果可以解决问题请告诉我。

-Sil


0
投票

使用简单

adb.show();

而不是

adb.create().show();

0
投票

就我而言,我必须替换导入的 AlertDialog 类:

import androidx.appcompat.app.AlertDialog;

至:

import android.app.AlertDialog;
© www.soinside.com 2019 - 2024. All rights reserved.