android - 无法从android对话框中读取数据

标签 android android-dialog

我正在尝试从如下所示的对话框(注册页面)中读取数据: enter image description here

代码是:

private void loginAndSignupDialog() {
    final Dialog dialog = new Dialog(SelectServiceActivity.this);
    dialog.setContentView(R.layout.dialog_login);
    dialog.setTitle("Login");
    dialog.findViewById(R.id.login_button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final String username = ((EditText) dialog.findViewById(R.id.username)).getText().toString();
            final String password = ((EditText) dialog.findViewById(R.id.password)).getText().toString();
            validateUser(username, password, dialog);
        }
    });
    dialog.findViewById(R.id.to_signup_page).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //final Dialog dialog = new Dialog(SelectServiceActivity.this);
            dialog.setContentView(R.layout.dialog_signup);
            dialog.setTitle("Signup");
            dialog.findViewById(R.id.signup).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final String email = ((EditText) dialog.findViewById(R.id.email)).getText().toString();
                    final String password = ((EditText) dialog.findViewById(R.id.password)).getText().toString();
                    final String confirmPassword = ((EditText) dialog.findViewById(R.id.confirm_password)).getText().toString();
                    final String mobileNo = ((EditText) dialog.findViewById(R.id.mobile_number)).getText().toString();
                    if (password.equals(confirmPassword)) {
                        registerUser(email, password, mobileNo);
                    } else {
                        Toast.makeText(SelectServiceActivity.this, "Two passwords are not same.", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    });
    dialog.show();
}

我在这些行收到“空指针异常”:

final String email = ((EditText) dialog.findViewById(R.id.email)).getText().toString();
                        final String password = ((EditText) dialog.findViewById(R.id.password)).getText().toString();
                        final String confirmPassword = ((EditText) dialog.findViewById(R.id.confirm_password)).getText().toString();
                        final String mobileNo = ((EditText) dialog.findViewById(R.id.mobile_number)).getText().toString();

场景是我通过单击登录页面上的 SIGNUP 文本从登录对话框移动到注册对话框页面,如下所示:

enter image description here

我在登录页面获取数据没有错误,但在注册页面属性上出现空指针异常。

注册对话框 XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat 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"
    android:layout_gravity="center"
    android:layout_margin="20sp"
    android:gravity="center"
    android:orientation="vertical"
    android:overScrollMode="ifContentScrolls"
    android:scrollbars="none"
    tools:context="in.co.servicedeal.app.SignupActivity">
    <android.support.v7.widget.AppCompatImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/sd_logo" />
    <android.support.v7.widget.AppCompatEditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/email"
        android:inputType="textEmailAddress" />
    <android.support.v7.widget.AppCompatEditText
        android:id="@+id/signup_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/password"
        android:inputType="textPassword" />
    <android.support.v7.widget.AppCompatEditText
        android:id="@+id/confirm_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/confirmPassword"
        android:inputType="textPassword" />
    <android.support.v7.widget.AppCompatEditText
        android:id="@+id/mobile_number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/mobileNumber"
        android:inputType="phone" />
    <android.support.v7.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <android.support.v7.widget.AppCompatCheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            app:buttonTint="@color/colorPrimary" />
        <android.support.v7.widget.AppCompatTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/serviceAggrement" />
    </android.support.v7.widget.LinearLayoutCompat>
    <android.support.v7.widget.AppCompatButton
        android:id="@+id/signup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10sp"
        android:background="@color/colorPrimary"
        android:elevation="@dimen/card_elevation"
        android:text="@string/signUp"
        android:textColor="@android:color/white"
        android:textSize="20sp" />
</android.support.v7.widget.LinearLayoutCompat>

登录对话框 XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:layout_margin="20sp"
    android:gravity="center"
    android:orientation="vertical"
    tools:context="in.co.servicedeal.app.LoginActivity">
    <android.support.v7.widget.AppCompatImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/sd_logo" />
    <android.support.v7.widget.AppCompatEditText
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/userName" />
    <android.support.v7.widget.AppCompatEditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/password"
        android:inputType="textPassword" />
    <android.support.v7.widget.AppCompatButton
        android:id="@+id/login_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="25sp"
        android:background="@color/colorPrimary"
        android:text="@string/login"
        android:textColor="@android:color/white"
        android:textSize="20sp" />
    <android.support.v7.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20sp"
        android:layout_marginTop="10sp"
        android:gravity="center">
        <android.support.v7.widget.AppCompatTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/dontHaveAcct" />
        <android.support.v7.widget.AppCompatTextView
            android:id="@+id/to_signup_page"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5sp"
            android:text="@string/signUp"
            android:textStyle="bold" />
    </android.support.v7.widget.LinearLayoutCompat>
</android.support.v7.widget.LinearLayoutCompat>

请推荐!

最佳答案

NullPointerException is thrown when an application attempts to use an object reference that has the null value .

  1. 您正在打开父级的新对话框
  2. 检查 getText().toString() 是否为 null 或 NOT
  3. 确保设置正确的 findViewById(R.id.

你应该试试

final Dialog dialog_SignUP = new Dialog(SelectServiceActivity.this);
dialog_SignUP.setContentView(R.layout.dialog_signup);
dialog_SignUP.setTitle("Signup");
dialog_SignUP.findViewById(R.id.signup).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final String email = ((EditText) dialog_SignUP.findViewById(R.id.email)).getText().toString();
                final String password = ((EditText) dialog_SignUP.findViewById(R.id.password)).getText().toString();
                final String confirmPassword = ((EditText) dialog_SignUP.findViewById(R.id.confirm_password)).getText().toString();
                final String mobileNo = ((EditText) dialog_SignUP.findViewById(R.id.mobile_number)).getText().toString();
                if (password.equals(confirmPassword)) {
                    registerUser(email, password, mobileNo);
                } else {
                    Toast.makeText(SelectServiceActivity.this, "Two passwords are not same.", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
});
dialog_SignUP.show();

关于android - 无法从android对话框中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45478119/

相关文章:

android - 如何从android中的另一个搜索栏动态移动搜索栏?

java - 约束连接/绳索/线以避免拉伸(stretch)

Android 对话框设置取消触摸侧

android - 添加进度对话框 asynctask Android 登录

android - 如何防止用户删除 EditText 小部件中预先存在的文本?

android - 复制到 APK lib/x86/librealm-jni.so 中的重复文件

android - 从另一个类调用 Dialog

android - SetView AlertDialogBu​​ilder 奇怪的行为

android - 我什么时候应该关闭对话框?

android - 自定义 NumberPickerPreference - 如何设置 NumberPicker 值?