java - 从 xml 从单选按钮抓取文本的空指针异常问题

标签 java android firebase android-studio

我试图从这个单选按钮中获取男性女性文本,但它给了我一个空指针异常,而且我只是在尝试修复这个问题的每一点上都停滞不前,无论是将文本完全存储为另一个变量还是其他什么。这是使用 firebase 作为后端,所以也许这只是 irebase 中不允许这样做的新怪癖。

package io.github.anoobishnoob.barker;

import android.content.Intent;
import android.nfc.Tag;
import android.renderscript.Sampler;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Logger;

public class RegistrationActivity extends AppCompatActivity {



    //TODO: fix nullpointer eexception on line 64-67
    private Button mRegister;

    private EditText mEmail, mPassword, mName;

    private RadioGroup mRadioGroup;

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener firebaseAuthStateListener;

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

        mAuth = FirebaseAuth.getInstance();
        firebaseAuthStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                if (user != null){
                    Intent intent = new Intent(RegistrationActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                    return;
                }
            }
        };


        mRegister = (Button) findViewById(R.id.register);

        mEmail = (EditText) findViewById(R.id.email);
        mPassword = (EditText) findViewById(R.id.password);
        mName = (EditText) findViewById(R.id.name);

        mRadioGroup = (RadioGroup) findViewById(R.id.radioGroup);

        Log.d("test debug mRadioGroup", mRadioGroup.toString());


        mRegister.setOnClickListener(new View.OnClickListener() {
            int selectId = mRadioGroup.getCheckedRadioButtonId();
            final RadioButton radioButton = (RadioButton) findViewById(selectId);


            //String radioButtonValue = String.valueOf(radioButton.getText());

            @Override
            public void onClick(View v) {
                final String email = mEmail.getText().toString();
                final String password = mPassword.getText().toString();
                final String name = mName.getText().toString();
                Log.d("test debug", mRadioGroup.toString());
                //Log.d("test debug", radioButton.toString());
                mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(RegistrationActivity.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {
                            Toast.makeText(RegistrationActivity.this, "sign up error", Toast.LENGTH_SHORT);

                        }
                        else{
                            String userId = mAuth.getCurrentUser().getUid();
                            DatabaseReference currentUserDb = FirebaseDatabase
                                    .getInstance()
                                    .getReference()
                                    .child("Users")
                                    .child(radioButton.toString()).child(userId).child("name");
                            currentUserDb.setValue(name);
                        }

                    }
                });

            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        mAuth.addAuthStateListener(firebaseAuthStateListener);

    }


    @Override
    protected void onStop() {
        super.onStop();
        mAuth.removeAuthStateListener(firebaseAuthStateListener);
    }
}

XML:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="io.github.anoobishnoob.barker.RegistrationActivity"
        android:orientation="vertical">
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="name"
            android:id="@+id/name"/>
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/radioGroup">
            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Male"/>
            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Female"/>
        </RadioGroup>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="email"
            android:id="@+id/email"/>

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="password"
            android:id="@+id/password"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="register"
            android:id="@+id/register"/>

    </LinearLayout>

最佳答案

首先给两个RadioButton id。

然后,你可以像下面这样使用它

int rid = mRadioGroup.getCheckedRadioButtonId();
RadioButton rb = (RadioButton) findViewById(rid);
String radioText = rb.getText().toString();

关于java - 从 xml 从单选按钮抓取文本的空指针异常问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53863581/

相关文章:

java - 启动 Intent 查看器以显示来自 url 的图像

java - Hashtable的超时机制

javascript - Angular 项目 : How to get instance of secondary firebase app?

node.js - 无法使用 Windows 10 安装 firebase 工具 cli

Swift 3 setValuesForKeys 错误

Java:函数可以返回调用类和方法名称的任何简单方法?

Java键盘钩子(Hook)

android - Camera intent resultCode 在 4.4.2 中为 0 但在 5.0 及更高版本中为 -1

android - 如何使用按钮暂停 libGDX 中的 SpriteAnimation,以便在按下暂停按钮时能够查看当前帧?

java - SQL检查3列+增量