java - 如何修复从设置活动到主要活动的移动?
问题描述
我有设置活动,当用户按下更新配置文件按钮时,我希望用户将其从设置活动移动到主活动
package com.example.chat;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
import de.hdodenhof.circleimageview.CircleImageView;
public class SettingsActivity extends AppCompatActivity {
private Button UpdateAccountSettings;
private EditText userName, userStatus;
private CircleImageView userProfileImage;
private String currentUserID;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
mAuth =FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
RootRef = FirebaseDatabase.getInstance().getReference();
InitializeFields();
UpdateAccountSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(@NonNull View view) {
UpdateSettings();
}
});
}
private void InitializeFields() {
UpdateAccountSettings = findViewById(R.id.update_setting_button);
userName = findViewById(R.id.set_user_name);
userStatus = findViewById(R.id.set_profile_status);
userProfileImage = findViewById(R.id.profile_image);
}
private void UpdateSettings() {
String setUserName = userName.getText().toString();
String setStatus = userStatus.getText().toString();
if (TextUtils.isEmpty(setUserName)){
Toast.makeText(this, "Username Is Empty!!!", Toast.LENGTH_LONG).show();
}
if (TextUtils.isEmpty(setStatus)){
Toast.makeText(this, "Status Is Empty!!!", Toast.LENGTH_LONG).show();
}
else {
HashMap<String, Object> profileMap = new HashMap<>();
profileMap.put("uid", currentUserID);
profileMap.put("name", setUserName);
profileMap.put("status", setStatus);
RootRef.child("User").child(currentUserID).setValue(profileMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(Task<Void> task) {
if (task.isSuccessful()){
SendUserToMainActivity();
Toast.makeText(SettingsActivity.this, "Profile Updated.", Toast.LENGTH_SHORT).show();
}
else {
String message = task.getException().toString();
Toast.makeText(SettingsActivity.this, "Error " + message, Toast.LENGTH_LONG).show();
}
}
});
}
}
private void SendUserToMainActivity() {
Intent mainIntent = new Intent(SettingsActivity.this, MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
}
}
当我按下更新配置文件按钮时,它说配置文件已更新,但它没有进入主要活动提前致谢。
解决方案
如果您不是绝对需要带有意图的标志,我建议您暂时删除它们。
此外,在您从 Github ( https://github.com/sadsouler/MyApplication/blob/master/app/src/main/java/tk/hackeridiot/chat/SettingsActivity.java )共享的代码中,SendUserToMainActivity()
功能是:
private void SendUserToMainActivity() {
Intent mainIntent = new Intent(SettingsActivity.this, MainActivity.class);
setResult(Activity.RESULT_OK, mainIntent);
finish();
}
在此代码中,您正在创建意图但从不使用它。虽然你在 StackOverflow 上分享的代码确实有这部分,但 Github 上的代码没有。将 Github 上的代码替换为:
private void SendUserToMainActivity()
startActivity(new Intent(this, MainActivity.class);
}
此外,您应该使用调试器或调试消息来了解程序是否实际到达此功能。虽然它可能应该因为你正在调用该函数,但是,检查它永远不会有坏处。因此,使用此代码来了解函数是否使用调试消息(或直接使用调试器)执行:
private void SendUserToMainActivity() {
Log.d("debugTag", "Creating an intent to MainActivity...");
startActivity(new Intent(this, MainActivity.class);
}
除此之外,我不能在您的代码中出现任何其他错误。
推荐阅读
- database - pgadmin 和 pgmodeler 可以连接到 Google Cloud Spanner 吗?
- javascript - 如何限制 Vue 中的分页按钮?
- python-3.x - 多重超级继承的单元测试(在pytest中)
- go - VSCode 不为每个 Go Editor 选项卡启用链接
- r - Favstats (R-Mosaic) 由于非数字变量而返回错误,尽管变量只是数字
- html - 如何在jquery中获取选中复选框的ID
- javascript - Vue - 如何在甜蜜警报中加载组件?
- domain-driven-design - DDD 战略设计:共享内核模式与发布语言模式
- spring - 如何使用 Spring Boot Crudrepository 将数据插入到同一数据库中的 2 个表中?
- flutter - 如何使用 extendBodyBehindAppBar = false 使 SliverAppbar 像 Scaffold Appbar