Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从xml中从单选按钮抓取文本时出现空指针异常问题_Java_Android_Firebase_Android Studio - Fatal编程技术网

Java 从xml中从单选按钮抓取文本时出现空指针异常问题

Java 从xml中从单选按钮抓取文本时出现空指针异常问题,java,android,firebase,android-studio,Java,Android,Firebase,Android Studio,我试图从这个单选按钮中获取男女文本,但它给了我一个空指针异常,我只是在尝试修复这个问题的每一点上都卡住了,不管是将文本完全存储为另一个变量还是其他什么。这是使用firebase作为它的后端,所以这可能只是irebase中的一个新怪癖,不允许这样做 package io.github.anoobishnoob.barker; import android.content.Intent; import android.nfc.Tag; import android.renderscript.Sam

我试图从这个单选按钮中获取男女文本,但它给了我一个空指针异常,我只是在尝试修复这个问题的每一点上都卡住了,不管是将文本完全存储为另一个变量还是其他什么。这是使用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);
    }
}
包io.github.anobishnoob.barker;
导入android.content.Intent;
导入android.nfc.Tag;
导入android.renderscript.Sampler;
导入android.support.annotation.NonNull;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.RadioButton;
导入android.widget.RadioGroup;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.AuthResult;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.Logger;
公共类注册活动扩展了AppCompatActivity{
//TODO:修复第64-67行上的空指针异常
私人按钮注册器;
私有编辑文本mEmail、mPassword、mName;
私人放射组;
私人消防队;
私有FirebaseAuth.AuthStateListener firebaseAuthStateListener;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u注册);
mAuth=FirebaseAuth.getInstance();
firebaseAuthStateListener=新的FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
最终FirebaseUser用户=FirebaseAuth.getInstance().getCurrentUser();
如果(用户!=null){
意向意向=新意向(RegistrationActivity.this,MainActivity.class);
星触觉(意向);
完成();
返回;
}
}
};
mRegister=(按钮)findviewbyd(R.id.register);
mEmail=(EditText)findViewById(R.id.email);
mPassword=(EditText)findViewById(R.id.password);
mName=(EditText)findViewById(R.id.name);
mRadioGroup=(放射组)findViewById(R.id.RadioGroup);
d(“test debug mRadioGroup”,mRadioGroup.toString());
mRegister.setOnClickListener(新视图.OnClickListener(){
int selectId=mRadioGroup.getCheckedRadioButtonId();
最终RadioButton RadioButton=(RadioButton)findViewById(selectId);
//String radioButtonValue=String.valueOf(radioButton.getText());
@凌驾
公共void onClick(视图v){
最后一个字符串email=mEmail.getText().toString();
最终字符串密码=mPassword.getText().toString();
最终字符串名称=mName.getText().toString();
Log.d(“测试调试”,mRadioGroup.toString());
//Log.d(“测试调试”,radioButton.toString());
mAuth.createUserWithEmailAndPassword(电子邮件,密码).addOnCompleteListener(RegistrationActivity.this,new OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
如果(!task.issusccessful()){
Toast.makeText(RegistrationActivity.this,“注册错误”,Toast.LENGTH\u SHORT);
}
否则{
字符串userId=mAuth.getCurrentUser().getUid();
DatabaseReference currentUserDb=FirebaseDatabase
.getInstance()
.getReference()
.child(“用户”)
.child(radioButton.toString()).child(userId).child(“名称”);
currentUserDb.setValue(名称);
}
}
});
}
});
}
@凌驾
受保护的void onStart(){
super.onStart();
mAuth.addAuthStateListener(firebaseAuthStateListener);
}
@凌驾
受保护的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>

首先为两个单选按钮提供id

在那之后,你可以像下面那样使用它

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

使用
radioButton.getText().toString()代替
radioButton.toString()

您尚未在XML中为两个RadioButton提供任何id。非常感谢。这件事一直困扰着我或是一个星期。非常感谢你。这已经困扰了我一个多星期了