You need to enable JavaScript to run this app. 安卓随机密码生成应用如何将生成的密码上传至Firebase实时数据库
优惠活动
大模型
产品
解决方案
定价
更多

安卓随机密码生成应用如何将生成的密码上传至Firebase实时数据库

实现方案

上传逻辑放置位置

你需要把Firebase上传代码放在密码生成成功后的非空判断分支内,也就是onClick方法里pass.isEmpty()为false对应的else代码块中,此时密码已经生成完成,满足上传条件。

完整修改后的代码

import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Random;
// 新增Firebase导入
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.DatabaseReference;

public class MainActivity extends AppCompatActivity {
    Button button;
    TextView textView;
    CheckBox num;
    CheckBox upper;
    CheckBox lower;
    CheckBox sym;
    EditText max_lenght;
    // 新增Firebase数据库实例声明
    FirebaseDatabase db;
    DatabaseReference dbRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 移除原有重复的findViewById冗余代码
        button = findViewById(R.id.button5);
        textView = findViewById(R.id.textView2);
        num = findViewById(R.id.num);
        upper = findViewById(R.id.upper) ;
        lower = findViewById(R.id.lower) ;
        sym = findViewById(R.id.sym) ;
        max_lenght = findViewById(R.id.editTextNumberSigned);

        // 初始化Firebase数据库实例,指向存储密码的节点
        db = FirebaseDatabase.getInstance();
        dbRef = db.getReference("generated_passwords");

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View pas) {
                String pass = randompassword(Integer.parseInt(max_lenght.getText().toString()),upper.isChecked(),lower.isChecked(),num.isChecked(),sym.isChecked());
                if (pass.isEmpty()){
                    Toast.makeText(getApplicationContext(),"请输入有效参数",Toast.LENGTH_SHORT).show();
                }
                else {
                    // 原有复制到剪贴板逻辑
                    ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
                    ClipData clipData = ClipData.newPlainText("Veri",pass);
                    clipboardManager.setPrimaryClip(clipData);
                    
                    // 新增Firebase上传逻辑,push方法生成唯一键避免密码覆盖
                    String uploadKey = dbRef.push().getKey();
                    dbRef.child(uploadKey).setValue(pass).addOnCompleteListener(task -> {
                        if(task.isSuccessful()){
                            Toast.makeText(getApplicationContext(),"密码生成并上传成功",Toast.LENGTH_LONG).show();
                        }else{
                            Toast.makeText(getApplicationContext(),"上传失败:"+task.getException().getMessage(),Toast.LENGTH_LONG).show();
                        }
                    });
                }
                textView.setText(pass);
            }
        });
    }

    private static String randompassword(int max_lenght, boolean upperCase, boolean lowerCase, boolean numbers, boolean specialCharacters)
    {
        String upperCaseChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String lowerCaseChars = "abcdefghijklmnopqrstuvwxyz";
        String numberChars = "0123456789";
        String specialChars = "!@#$%^&*()_-+=<>?/{}~|";
        String allowedChars = "";
        Random rn = new Random();
        StringBuilder sb = new StringBuilder(max_lenght);

        if (upperCase){
            allowedChars+=upperCaseChars;
            sb.append(upperCaseChars.charAt(rn.nextInt(upperCaseChars.length()-1)));
        }
        if(lowerCase){
            allowedChars+=lowerCaseChars;
            sb.append(lowerCaseChars.charAt(rn.nextInt(lowerCaseChars.length()-1)));
        }
        if (numbers){
            allowedChars+=numberChars;
            sb.append(numberChars.charAt(rn.nextInt(numberChars.length()-1)));
        }
        if (specialCharacters){
            allowedChars+=specialChars;
            sb.append(specialChars.charAt(rn.nextInt(specialChars.length()-1)));
        }
        if(allowedChars.isEmpty()){
            return "";
        }
        sb.append(allowedChars.charAt(rn.nextInt(allowedChars.length()-1)));
        for(int i=sb.length();i < max_lenght; ++i){
            sb.append(allowedChars.charAt(rn.nextInt(allowedChars.length())));
        }
        return sb.toString();
    }
}

注意事项

  • 测试阶段可临时将Firebase实时数据库的安全规则设置为允许读写,正式上线前必须添加用户身份验证逻辑,修改为仅授权用户可读写的规则,避免数据泄露。
  • 若仍上传失败,可检查控制台报错信息,确认包名、签名、google-services.json配置是否正确。

内容的提问来源于stack exchange,提问作者Murat Bektaş

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 17:30:01