Firebase java.lang.IllegalStateException:此活动需要使用Theme.AppCompat主题(或后代)

时间:2018-07-19 22:34:00

标签: android android-alertdialog

我读了很多类似的问题,但不知道如何解决我的问题。

我在这堂课上收到了来自Firebase的云消息通知:

public class FirebaseMessagingServiceImpl extends FirebaseMessagingService {

    private final static String TAG = "FirebaseMessaging";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.i(TAG, "Message from " + remoteMessage.getFrom());
        if (remoteMessage.getNotification() != null) {
            final String content = remoteMessage.getNotification().getBody();
            final String title = remoteMessage.getNotification().getTitle();
            Log.i(TAG, "...with content: " + content);

            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    UserInterfaceUtils.getAlertDialog(
                            getApplicationContext(),
                            title,
                            content,
                            android.R.string.ok,
                            android.R.string.no,
                            android.R.drawable.ic_dialog_alert,
                            null, null,
                            true, false).show();
                }
            });
        }
        super.onMessageReceived(remoteMessage);
    }

    @Override
    public void onDeletedMessages() {
        super.onDeletedMessages();
    }
}

我要从那里创建一个alert.dialog。但是我得到了这个IllegalStateException。当我记录getApplicationContext()的字符串时,我得到的是:android.support.multidex.MultiDexApplication@42585d08

我很困在这里,不知道如何解决这个问题。

为完整起见,我的getAlertDialog方法:

public static AlertDialog.Builder getAlertDialog(Context context, String title, String message, int pos, int neg, int icon, final Callable posFunc, final Callable negFunc, boolean posButton, boolean negButton) {
        AlertDialog.Builder builder;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            builder = new AlertDialog.Builder(context, R.style.ShopDialogTheme);
        } else {
            builder = new AlertDialog.Builder(context);
        }

        builder.setTitle(title)
                .setMessage(Html.fromHtml(message));

        if (posButton)
            builder.setPositiveButton(pos, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        posFunc.call();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        if (negButton)
            builder.setNegativeButton(neg, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        negFunc.call();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        builder.setCancelable(false);
        builder.setIcon(icon);
        return builder;
    }

1 个答案:

答案 0 :(得分:0)

基于标题,听起来好像您在运行代码时所具有的任何Activity都在扩展Activity,并且它需要扩展AppCompatActivity,并且您在res / styles.xml中使用的任何主题都应该是AppCompat主题。