java - 如何修复从设置 Activity 到主要 Activity 的移动?

标签 java android firebase

我有settingactivity,我希望用户在按下更新配置文件按钮时将其从settingactivity移动到mainactivity,我尝试删除@NonNull,但它没有影响任何我尝试更改的内容,甚至是Intent,但这里没有效果代码

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();
    }
}

当我按下更新个人资料按钮时,它说个人资料已更新,但不会进入主要 Activity 提前致谢。

最佳答案

如果您并非绝对需要这些标志,我建议您暂时删除它们。

此外,在您从 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();
}

在此代码中,您正在创建 Intent 但从未使用它。虽然你在 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);
}

除此之外,我无法在您的代码中发现任何其他错误。

关于java - 如何修复从设置 Activity 到主要 Activity 的移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57143712/

相关文章:

java - 灰熊队 Jersey 中的静态内容

java - 对于 SQLite (Eclipse),将数据库从本地导入到模拟器,反之亦然

android - 决定在 firebase 中创建新项目或更新旧项目

android - 从 Android 中的 Firebase 子项检索单个值

java - 未处理的异常类型错误

java - 我只是想在 C 盘共享批处理文件夹中的服务器上运行批处理文件

Android:Spinner 项目的圆角

android - 如何在Android上预先计算mp3文件?

android - 保存 JNIEnv* 的最佳方法是什么?

android - 将 Google Analytics 与 FireBase + Google 标签管理器 Android SDK 结合使用