第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

點擊登錄按鈕并嘗試獲取片段 EditText 值時應(yīng)用程序崩潰

點擊登錄按鈕并嘗試獲取片段 EditText 值時應(yīng)用程序崩潰

炎炎設(shè)計 2023-08-09 17:31:02
登錄方法有問題。我的活動包含片段容器和 2 個按鈕(登錄和注冊)。在活動的創(chuàng)建方法中,我初始化片段,并將登錄片段添加到容器中。在 onClickSignButtons 方法中,我有 switch case 函數(shù),它應(yīng)該獲取按下的按鈕 id 并根據(jù)按鈕 id 進行一些思考。但點擊按鈕應(yīng)用程序崩潰。logcat 的日志如下:Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference        at  com.enjoyapp.eventmanagement.Screens.Login.View.LoginActivity.onClickSignButtons(LoginActivity.java:45)登錄活動public class LoginActivity extends AppCompatActivity implements LoginModel {private LoginPresenter presenter;private Fragment EmailAndPasswordFragment, userDetailsFragment;private Fragment selectedFragment = null;UserSingleton userSingleton;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_login);    presenter = new LoginPresenter(this);    EmailAndPasswordFragment = new EmailAndPasswordFieldsFragment();    userDetailsFragment = new UserDetailsFragment();    getSupportFragmentManager().beginTransaction().add(R.id.fields_container, new EmailAndPasswordFieldsFragment())            .commit();    selectedFragment = EmailAndPasswordFragment;}public void onClickSignButtons(View view) {    switch (view.getId()) {        case R.id.btnSignIn:            if (selectedFragment == EmailAndPasswordFragment) {                userSingleton.setmEmail(((EditText) EmailAndPasswordFragment.getView().findViewById(R.id.etEmail)).getText().toString().trim());                userSingleton.setmPassword(((EditText) EmailAndPasswordFragment.getView().findViewById(R.id.etPassword)).getText().toString().trim());                presenter.signIn(userSingleton.getmEmail(), userSingleton.getmPassword());            } else {                getSupportFragmentManager().beginTransaction().add(R.id.fields_container, new EmailAndPasswordFieldsFragment())                        .commit();                selectedFragment = EmailAndPasswordFragment;
查看完整描述

4 回答

?
桃花長相依

TA貢獻1860條經(jīng)驗 獲得超8個贊

從我所看到的是,您正在初始化片段并將其存儲在變量 EmailAndPasswordFragment 中,但是在將片段添加到容器時,您再次重新初始化它。

這就是為什么它給出空指針異常。

這是你的onCreate

getSupportFragmentManager().beginTransaction().add(R.id.fields_container, EmailAndPasswordFragment)
        .commit();


查看完整回答
反對 回復(fù) 2023-08-09
?
慕的地6264312

TA貢獻1817條經(jīng)驗 獲得超6個贊

更新:哦天哪,我很抱歉大家,我只是忘記初始化 UserSingleton 類。


剛剛添加到 onCreate 方法的下一行: userSingleton = UserSingleton.getInstance();


xml 中有一個新代碼


public class LoginActivity extends AppCompatActivity implements LoginModel {


    private LoginPresenter presenter;

    private Fragment emailAndPasswordFragment;

    private Fragment userDetailsFragment;

    private Fragment selectedFragment = null;

    UserSingleton userSingleton;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_login);


        presenter = new LoginPresenter(this);


        emailAndPasswordFragment = new EmailAndPasswordFieldsFragment();

        userDetailsFragment = new UserDetailsFragment();


        getSupportFragmentManager().beginTransaction().add(R.id.fields_container, emailAndPasswordFragment)

                .commit();

        selectedFragment = emailAndPasswordFragment;


    }



    public void onClickSignInAndUpButtons(View view) {

        switch (view.getId()) {

            case R.id.btnSignIn:

                if (selectedFragment == emailAndPasswordFragment) {

                    userSingleton.setmEmail(((EditText) emailAndPasswordFragment.getView().findViewById(R.id.etEmail)).getText().toString().trim());

                    userSingleton.setmPassword(((EditText) emailAndPasswordFragment.getView().findViewById(R.id.etPassword)).getText().toString().trim());

                    presenter.signIn(userSingleton.getmEmail(), userSingleton.getmPassword());

                } else {

                    getSupportFragmentManager().beginTransaction().add(R.id.fields_container, emailAndPasswordFragment)

                            .commit();

                    selectedFragment = emailAndPasswordFragment;

                }


                break;

            case R.id.btnGetStarted:

                //TODO edd signup methos

                break;


        }

    }

登錄活動 XML:


<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:card_view="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:background="@drawable/gradien_color"

    tools:context=".Screens.Login.View.LoginActivity">


    <ImageView

        android:id="@+id/logoMain"

        android:layout_width="200dp"

        android:layout_height="200dp"

        android:layout_gravity="center"

        android:layout_marginStart="8dp"

        android:layout_marginTop="52dp"

        android:layout_marginEnd="8dp"

        android:contentDescription="@string/logo_main"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.497"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:srcCompat="@drawable/logo_main" />


    <FrameLayout

        android:id="@+id/fields_container"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="center"

        android:layout_marginStart="8dp"

        android:layout_marginTop="8dp"

        android:layout_marginBottom="8dp"

        app:layout_constraintBottom_toTopOf="@+id/cvGetStarted"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toBottomOf="@+id/logoMain">


    </FrameLayout>


    <androidx.cardview.widget.CardView

        android:id="@+id/cvGetStarted"

        android:layout_width="300dp"

        android:layout_height="50dp"

        android:layout_marginStart="8dp"

        android:layout_marginBottom="20dp"

        android:translationZ="8dp"

        app:layout_constraintBottom_toTopOf="@+id/btnSignIn"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.456"

        app:layout_constraintStart_toStartOf="parent"

        card_view:cardCornerRadius="25dp"

        card_view:cardElevation="3dp">


        <Button

            android:id="@+id/btnGetStarted"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:background="@drawable/register_button_style"

            android:text="@string/btn_get_started"

            android:textColor="@color/white" />

    </androidx.cardview.widget.CardView>


    <Button

        android:id="@+id/btnSignIn"

        android:layout_width="200dp"

        android:layout_height="50dp"

        android:layout_marginBottom="48dp"

        android:background="@null"

        android:onClick="onClickSignInAndUpButtons"

        android:stateListAnimator="@null"

        android:text="@string/btn_sign_in"

        android:textColor="@color/white"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.497"

        app:layout_constraintStart_toStartOf="parent" />



</androidx.constraintlayout.widget.ConstraintLayout>

片段類


public class EmailAndPasswordFieldsFragment extends Fragment {


    private EditText etEmail, etPassword;


    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_email_and_password_fields, container, false);


        etEmail = view.findViewById(R.id.etEmail);

        etPassword = view.findViewById(R.id.etPassword);


        return view;

    }


}

片段 xml:


<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:card_view="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=".Screens.Login.View.UserDetailsFragment">


    <LinearLayout

        android:layout_width="350dp"

        android:layout_height="150dp"

        android:layout_gravity="center"

        android:orientation="vertical"

        android:gravity="center">


        <androidx.cardview.widget.CardView

            android:layout_width="250dp"

            android:layout_height="40dp"

            android:layout_marginStart="8dp"

            android:layout_marginEnd="8dp"

            android:layout_marginBottom="12dp"

            android:translationZ="8dp"

            card_view:cardBackgroundColor="@android:color/transparent"

            card_view:cardCornerRadius="25dp"

            card_view:cardElevation="3dp">


            <EditText

                android:id="@+id/etEmail"

                android:layout_width="250dp"

                android:layout_height="40dp"

                android:background="@drawable/input_field_style"

                android:drawableStart="@drawable/login_icon"

                android:drawableTint="@color/tint_and_text_color"

                android:ems="10"

                android:hint="@string/hint_email"

                android:inputType="textEmailAddress"

                android:textColor="@color/main_text_color"

                android:textColorHint="@color/tint_and_text_color"

                android:textSize="16sp" />


        </androidx.cardview.widget.CardView>


        <androidx.cardview.widget.CardView

            android:layout_width="250dp"

            android:layout_height="40dp"

            android:layout_marginStart="8dp"

            android:layout_marginEnd="8dp"

            android:layout_marginBottom="12dp"

            android:translationZ="8dp"

            card_view:cardBackgroundColor="@android:color/transparent"

            card_view:cardCornerRadius="25dp"

            card_view:cardElevation="3dp">


            <EditText

                android:id="@+id/etPassword"

                android:layout_width="250dp"

                android:layout_height="40dp"

                android:background="@drawable/input_field_style"

                android:drawableStart="@drawable/password_icon"

                android:drawableTint="@color/tint_and_text_color"

                android:ems="10"

                android:hint="@string/hint_password"

                android:inputType="textPassword"

                android:textColor="@color/main_text_color"

                android:textColorHint="@color/tint_and_text_color"

                android:textSize="16sp" />


        </androidx.cardview.widget.CardView>


    </LinearLayout>

</FrameLayout>



查看完整回答
反對 回復(fù) 2023-08-09
?
慕姐4208626

TA貢獻1852條經(jīng)驗 獲得超7個贊

EmailAndPasswordFragment = new EmailAndPasswordFieldsFragment();

這是 EmailAndPasswordFragment 的第一個實例,在 add 方法中您將傳遞 EmailAndPasswordFragment 的新實例

在 onclick 內(nèi)部,您正在訪問第一個實例的值。


查看完整回答
反對 回復(fù) 2023-08-09
?
30秒到達戰(zhàn)場

TA貢獻1828條經(jīng)驗 獲得超6個贊

你的線路有問題

    EmailAndPasswordFragment = new EmailAndPasswordFieldsFragment();

因為您正在創(chuàng)建 Fragment 對象,但將其分配給類名,而不是變量,然后您分配給selectedFragment由類名分配的變量。

解決辦法 更換線路

EmailAndPasswordFragment = new EmailAndPasswordFieldsFragment();

EmailAndPasswordFragment ePF = new EmailAndPasswordFieldsFragment();

和線

getSupportFragmentManager().beginTransaction().add(R.id.fields_container, new EmailAndPasswordFieldsFragment())
            .commit();
    selectedFragment = EmailAndPasswordFragment;

getSupportFragmentManager().beginTransaction().add(R.id.fields_container, ePF)
                .commit();
        selectedFragment = ePF;

并將該行替換 if(selectedFragment == EmailAndPasswordFragment)if(!(selectedFragment instanceof EmailAndPasswordFragment))


查看完整回答
反對 回復(fù) 2023-08-09
  • 4 回答
  • 0 關(guān)注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號