android - Firebase Android:创建原子字段更新程序失败,java.lang.IllegalArgumentException:必须是整数类型
问题描述
我的 Android 应用在调试模式下运行良好,但在发布模式下崩溃。当我尝试使用 Firebase Auth.App 登录时会出现问题,如果我在发布版本中设置 debuggable : true 可以正常工作。日志 cat 提供 Atomic 字段更新相关的错误。是因为 proguard 正在删除一些课程吗?我在下面提供了代码和 Logcat:
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
Toast.makeText(SignUpActivity.this, "You are already registered", Toast.LENGTH_SHORT).show();
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressBar.setVisibility(View.GONE);
if (task.isSuccessful()) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String uid = user.getUid();
sharedPref = getApplicationContext().getSharedPreferences(uid, Context.MODE_PRIVATE);
sharedPref.edit().clear().commit();
DocumentReference docRef = db.collection("PB_USERS").document(uid);
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
SharedPreferences.Editor editor = sharedPref.edit();
DocumentSnapshot document = task.getResult();
if (document.exists()) {
CurrentUser currentUser = document.toObject(CurrentUser.class);
ArrayList<String> purchases = currentUser.getPurchases();
for (String purchasedTrade : purchases) {
editor.putBoolean(purchasedTrade, false);
}
editor.apply();
Intent intent = new Intent(SignUpActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
错误:
08-21 17:58:10.571 26027-26054/? E/bfy: Creating atomic field updaters failed
java.lang.IllegalArgumentException: Must be integer type
at java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl.<init>(AtomicIntegerFieldUpdater.java:278)
at java.util.concurrent.atomic.AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdater.java:52)
at bfy.<clinit>(Unknown Source)
at bfl.a(Unknown Source)
at bfl.a(Unknown Source)
at awp.<init>(Unknown Source)
at arw.a(Unknown Source)
at ary.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at axh$a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)
08-21 17:58:10.631 26027-26054/? E/bfx: Creating atomic field updaters failed
java.lang.ClassCastException
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:208)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:70)
at bfx$a.<clinit>(Unknown Source)
at bfx.a(Unknown Source)
at bfx$c.a(Unknown Source)
at bdt$a.a(Unknown Source)
at bho.a(Unknown Source)
at bgw.a(Unknown Source)
at axs.a(Unknown Source)
at awm.a(Unknown Source)
at awy.f(Unknown Source)
at awy.a(Unknown Source)
at arl.a(Unknown Source)
at art.a(Unknown Source)
at arw.c(Unknown Source)
at asa.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at axh$a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)
08-21 17:58:10.639 26027-26054/? E/bil: FieldUpdaterAtomicHelper failed
java.lang.IllegalArgumentException: Must be integer type
at java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl.<init>(AtomicIntegerFieldUpdater.java:278)
at java.util.concurrent.atomic.AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdater.java:52)
at bil.a(Unknown Source)
at bil.<clinit>(Unknown Source)
at bgb.<init>(Unknown Source)
at bho$f.a(Unknown Source)
at bim.a(Unknown Source)
at bdt$a.a(Unknown Source)
at bfy$e.a(Unknown Source)
at bdt$a.a(Unknown Source)
at bfx$c.a(Unknown Source)
at bdt$a.a(Unknown Source)
at bho.a(Unknown Source)
at bgw.a(Unknown Source)
at axs.a(Unknown Source)
at awm.a(Unknown Source)
at awy.f(Unknown Source)
at awy.a(Unknown Source)
at arl.a(Unknown Source)
at art.a(Unknown Source)
at arw.c(Unknown Source)
at asa.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at axh$a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)
我是 Android 和 Java 的初学者。这是应用程序 build.gradle 部分:
compileSdkVersion 27
defaultConfig {
applicationId "in.permabull.permabull"
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
解决方案
根据我的观察,我认为模型类(CurrentUser)的名称声明在使用 proguard 规则后发生了变化,因此添加一条语句以从 proguard 中排除 Currentuser.class 将解决该问题。将以下语句添加到项目文件夹中的 progurad-rules.pro 文件中
-keep class in.permabull.permabull.CurrentUser { *; }
注意:如果 CurrentUser 类驻留在路径 java/in/permabull/permabull/CurrentUser 中,则根据其他更改。干杯:)
推荐阅读
- mysql - NodeJS mysql应用程序冻结而没有错误 - 如何诊断
- android - Android MVVM 多 API 调用
- mysql - 创建表时时间数据类型不起作用
- angular - 构建 Angular 8 项目 CdkTableExporter 时出错。没有选择器
- r - 使用 dplyr 计算每个变量的出现次数
- netlogo - 采样 30 个值并找到标准差 + 平均值
- c# - 如何将具有 CR\LF 的字符串变量设置到 Winform 文本框中?
- installation - 如何在 clojurescript 中使用 jest?
- javascript - React Bootstrap Sticky Navbar 在滚动过去的标题后向下滑动
- rust - 在其他宏内部/之前调用宏