java - 为什么对话框没有关闭而 MainActivity 没有打开?
问题描述
用户单击继续按钮后,应出现一个对话框(“正在更新您的个人资料...”),并且应将用户定向到 MainActivity。但是当我单击继续时,会出现对话框并且不会消失并且用户不会被带到 MainActivity。尽我所能,我能理解的 logcat 中没有错误!我在这段代码中哪里出错了?
binding.continueBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = binding.nameBox.getText().toString();
String userbio = binding.bioBox.getText().toString();
if (name.isEmpty())
{
binding.nameBox.setError("Please enter your name");
return;
}
dialog.show();
if(selectedImage != null && FirebaseAuth.getInstance().getCurrentUser() != null)
{
StorageReference reference = storage.getReference().child("Profile_Pictures")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
reference.putFile(selectedImage).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()){
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String imageUrl = uri.toString();
String uid = auth.getUid();
String phone = FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber();
String name = binding.nameBox.getText().toString();
String email = getIntent().getStringExtra("email");
String password = getIntent().getStringExtra("password");
String userbio = binding.bioBox.getText().toString();
User user = new User(uid, name, phone, imageUrl , email , password, userbio);
if (uid != null) {
database.getReference()
.child("Users")
.child(uid)
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
dialog.dismiss();
Intent intent = new Intent(SetupProfileActivity.this , MainActivity.class);
startActivity(intent);
finish();
}
});
}}
});
}
}
});
} else {
String uid = FirebaseAuth.getInstance().getUid();
String phone = FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber();
String email = getIntent().getStringExtra("email");
String password = getIntent().getStringExtra("password");
User user = new User(uid, name, phone, "No Image Selected" , email , password, userbio );
if (uid != null) {
database.getReference()
.child("Users")
.child(uid)
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
dialog.dismiss();
Intent intent = new Intent(SetupProfileActivity.this , MainActivity.class);
startActivity(intent);
finish();
}
});
}}
}
});
日志猫:
java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[zip file "/system/app/VivoCalendar/VivoCalendar.apk"],nativeLibraryDirectories=[/system/app/VivoCalendar/lib/arm64, /system/app/VivoCalendar/VivoCalendar.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64, /system/lib64, /system/system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.LoadedApk.createAppFactory(LoadedApk.java:275)
at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:920)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:973)
at android.app.LoadedApk.getResources(LoadedApk.java:1205)
at android.app.ContextImpl.createAppContext(ContextImpl.java:2720)
at android.app.ContextImpl.createAppContext(ContextImpl.java:2712)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7078)
at android.app.ActivityThread.access$1500(ActivityThread.java:269)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
java.util.concurrent.CancellationException: Task was cancelled.
at com.google.common.w.a.d.s(SourceFile:3)
at com.google.common.w.a.d.get(SourceFile:4)
at com.google.common.w.a.dv.a(SourceFile:1)
at com.google.common.w.a.cb.q(SourceFile:2)
at com.google.common.w.a.bv.run(SourceFile:4)
at com.google.android.apps.gsa.shared.util.c.a.aq.run(SourceFile:1)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
2021-08-05 17:22:41.771 32609-32609/? E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-08-05 17:22:41.943 32609-32609/? E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-08-05 17:22:43.086 32272-32272/com.example.chatterapp E/ion: ioctl c0044901 failed with code -1: Invalid argument
java.io.IOException: com.linkedin.data.lite.DataReaderException: Cache miss for: voyager.android.infra-perform-unbind-in-bind-with-payload
at com.linkedin.android.lixclient.LixDiskCache.get(LixDiskCache.java:149)
at com.linkedin.android.lixclient.LixCacheManager.get(LixCacheManager.java:96)
at com.linkedin.android.lixclient.LixManagerImpl.getTreatmentWithOptionalTracking(LixManagerImpl.java:227)
at com.linkedin.android.lixclient.LixManagerImpl.getTreatment(LixManagerImpl.java:203)
at com.linkedin.android.infra.lix.LixDefinitionHelper.getLixTreatment(LixDefinitionHelper.java:157)
at com.linkedin.android.infra.lix.LixDefinitionHelper.isEnabled(LixDefinitionHelper.java:31)
at com.linkedin.android.app.LaunchManagerImpl.setupInfraLixes(LaunchManagerImpl.java:620)
at com.linkedin.android.app.LaunchManagerImpl.onAppProcessStarted(LaunchManagerImpl.java:342)
at com.linkedin.android.app.FlagshipApplication.onCreate(FlagshipApplication.java:305)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1242)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7218)
at android.app.ActivityThread.access$1500(ActivityThread.java:269)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
Caused by: com.linkedin.data.lite.DataReaderException: Cache miss for: voyager.android.infra-perform-unbind-in-bind-with-payload
at com.linkedin.android.fission.FissionProtobufDataReader.parseDataTemplate(FissionProtobufDataReader.java:116)
at com.linkedin.android.fission.FissionProtobufDataReader.parseRecord(FissionProtobufDataReader.java:81)
at com.linkedin.android.lixclient.LixDiskCache.get(LixDiskCache.java:147)
at com.linkedin.android.lixclient.LixCacheManager.get(LixCacheManager.java:96)
at com.linkedin.android.lixclient.LixManagerImpl.getTreatmentWithOptionalTracking(LixManagerImpl.java:227)
at com.linkedin.android.lixclient.LixManagerImpl.getTreatment(LixManagerImpl.java:203)
at com.linkedin.android.infra.lix.LixDefinitionHelper.getLixTreatment(LixDefinitionHelper.java:157)
at com.linkedin.android.infra.lix.LixDefinitionHelper.isEnabled(LixDefinitionHelper.java:31)
at com.linkedin.android.app.LaunchManagerImpl.setupInfraLixes(LaunchManagerImpl.java:620)
at com.linkedin.android.app.LaunchManagerImpl.onAppProcessStarted(LaunchManagerImpl.java:342)
at com.linkedin.android.app.FlagshipApplication.onCreate(FlagshipApplication.java:305)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1242)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7218)
at android.app.ActivityThread.access$1500(ActivityThread.java:269)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
com.google.android.gms.auth.UserRecoverableAuthException: BadAuthentication
at lqn.f(PG:16)
at lqj.a(Unknown Source:12)
at lqn.h(PG:5)
at lqn.g(PG:28)
at qdn.a(PG:13)
at qdl.h(PG:2)
at pvs.h(PG:11)
at pxq.a(PG:3)
at pxn.e(PG:6)
at psn.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
解决方案
关闭addOnCompleteListener
范围之外的对话框,试试这个 -
binding.continueBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//rest of code
dialog.show();
if (selectedImage != null && FirebaseAuth.getInstance().getCurrentUser() != null) {
StorageReference reference = storage.getReference().child("Profile_Pictures")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
reference.putFile(selectedImage).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
///rest of code
if (uid != null) {
database.getReference()
.child("Users")
.child(uid)
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//
}
});
}
}
});
}
}
});
//
dialog.dismiss();
Intent intent = new Intent(SetupProfileActivity.this, MainActivity.class);
startActivity(intent);
finish();
} else {
//rest of code
if (uid != null) {
database.getReference()
.child("Users")
.child(uid)
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//debug log
}
});
//
dialog.dismiss();
Intent intent = new Intent(SetupProfileActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
}
});
}
更新 - 数据存储 -
首先检查实时数据库规则是否更改。给写权限。
{
/* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
"rules": {
".read": true,
".write": true
}
}
然后另一个可能的原因可能是您的 POJO User 类。用这个
public class User {
public String uid,name,phone,imageUrl,email,password,userbio;
public User(String uid, String name, String phone, String imageUrl, String email, String password, String userbio) {
this.uid = uid;
this.name = name;
this.phone = phone;
this.imageUrl =imageUrl;
this.email = email;
this.password = password;
this.userbio = userbio;
}
}
推荐阅读
- symfony - Symfony 事件 - 如何不通过 Profiler 或预热触发内核事件
- ansible - SaltStack 中 Ansible 的“when”子句的等价物是什么?
- typescript - 从未定义的值中过滤数组
- python - 如何在 Django 中正确地短路中间件?
- python - 使用 pathlib,父级的父级只返回第一个父级本身(parent.parent == parent)
- python - 验证集过拟合和测试准确性提高
- repository - Typo3 9.5 - 自定义 flexform 排序,sql 中的反引号错误
- ssis - 如何在构建服务器上使用 Visual Studio Build Tools 2019 构建 SSIS 项目 (*.dtproj)
- linux - 当有两个进程使用同一个文件时,logrotate 是如何工作的?
- sql-server - SQL 存储过程的 VBA 执行因 adDecimal 数据类型而失败