首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Firebase Android :创建原子字段更新器失败,java.lang.IllegalArgumentException:必须为整数类型

Firebase Android :创建原子字段更新器失败,java.lang.IllegalArgumentException:必须为整数类型
EN

Stack Overflow用户
提问于 2018-08-21 21:06:41
回答 2查看 156关注 0票数 0

我的Android应用程序在调试模式下运行良好,但在发布模式下崩溃。当我尝试使用Firebase Auth.App登录时,如果我在发布版本中设置了debuggable : true,问题就会出现。Log cat提供与原子字段更新相关的错误。是不是因为proguard正在移除一些类?我已经提供了下面的代码和Logcat:

代码语言:javascript
复制
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();

                            }

错误:

代码语言:javascript
复制
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部分:

代码语言:javascript
复制
 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
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-22 14:36:33

根据我的观察,我认为模型类(CurrentUser)的名称声明在使用proguard规则后发生了变化,因此添加一条从proguard中排除Currentuser.class的语句可以解决这个问题。将以下语句添加到项目文件夹中的progurad rules.pro文件中

代码语言:javascript
复制
-keep class in.permabull.permabull.CurrentUser { *; }

注意:如果CurrentUser类驻留在路径java/ in /permabull/permabull/CurrentUser中,则相应地更改。干杯:)

票数 1
EN

Stack Overflow用户

发布于 2018-10-09 06:36:47

我不得不禁用R8来解决这个问题,谷歌已经https://r8-review.googlesource.com/c/r8/+/26161打开了一个问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51949401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档