You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio点击按钮时App崩溃问题求助

崩溃根因

你的应用崩溃是空指针异常(NullPointerException) 导致的,核心错误出在控件初始化逻辑:

  • 你声明的Button cAdd、EditText cname两个控件变量默认值是null,没有完成实例化
  • 你写的cname.findViewById(R.id.CName)、cAdd.findViewById(R.id.cAdd)逻辑完全错误:findViewById()是Activity提供的方法,需要调用Activity的这个方法拿到控件实例,再赋值给你声明的变量,而不是用空的控件对象去调用findViewById。
  • 移除控件初始化代码后不崩溃,也侧面印证了崩溃点就在这部分——后续你调用cAdd.setOnClickListener()、cname.getText()的时候,操作的都是null对象,直接触发崩溃。
修复方案
  1. 修正控件初始化的写法,把onCreate里的两行错误初始化代码替换成正确的赋值逻辑
  2. 补上Firebase操作的失败回调,避免出错时加载弹窗一直卡住无法关闭
  3. (规范建议)按照Java命名规则,将类名add改为大驼峰格式的AddActivity,避免后续混淆、清单文件注册出现隐性问题
修复后完整代码
package com.example.getorganized;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.HashMap;

public class add extends AppCompatActivity {
   private FirebaseAuth firebaseAuth;
   private ProgressDialog progressDialo;

    Button cAdd;
    EditText cname;
    String category = "";

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

        firebaseAuth = FirebaseAuth.getInstance();
        progressDialo =new ProgressDialog(this);
        progressDialo.setTitle("Please wait");
        progressDialo.setCanceledOnTouchOutside(false);
        
        // 修正:调用Activity的findViewById方法,将返回的控件实例赋值给变量
        cname = findViewById(R.id.CName);
        cAdd = findViewById(R.id.cAdd);

        cAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                vaildateData();
            }
        });
    }


    private void vaildateData() {
         category = cname.getText().toString().trim();
        if(category.isEmpty()){
            cname.setError("Enter name of Category");
        }
        else{
            addTo();
        }
    }

    private void addTo() {
        progressDialo.setMessage("Adding category...");
        progressDialo.show();

        long timestamp = System.currentTimeMillis();

        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("id", "" +timestamp);
        hashMap.put("category", ""+category);
        hashMap.put("timestamp", timestamp);
        hashMap.put("uid", ""+ firebaseAuth.getUid());

        DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Categories");
        ref.child(""+timestamp).setValue(hashMap)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void unused) {
                        progressDialo.dismiss();
                        Toast.makeText(add.this, "Category added successfully", Toast.LENGTH_LONG).show();
                    }
                })
                // 补上失败回调,避免出错时弹窗卡死
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        progressDialo.dismiss();
                        Toast.makeText(add.this, "Add failed: "+e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }
}

补充说明:替换代码后先确认activity_add.xml布局里确实存在id为CName的EditText控件、id为cAdd的Button控件,id拼写完全一致才不会出现找不到控件的问题。

内容的提问来源于stack exchange,提问作者UserRW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:39:49