Android 从片段调用意图时出错(用户登录)

Android 从片段调用意图时出错(用户登录),android,android-intent,onclick,onclicklistener,Android,Android Intent,Onclick,Onclicklistener,从片段调用intent时出现错误。 以下是相同的日志错误。下面是来自相同活动的代码片段。当我点击按钮登录时,应用程序会自动退出。 请帮帮我。 先谢谢你 日志报告 Process: com.example.lenovo.skanda, PID: 7978 java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText

从片段调用intent时出现错误。 以下是相同的日志错误。下面是来自相同活动的代码片段。当我点击按钮登录时,应用程序会自动退出。 请帮帮我。 先谢谢你

日志报告

Process: com.example.lenovo.skanda, PID: 7978
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.example.lenovo.skanda.AdminFragment$1.onClick(AdminFragment.java:43)
HomeFragment.java

  public class AdminFragment extends Fragment implements View.OnClickListener{

    View viewroot;
    View v1;
    private EditText Name;
    private EditText Password;
    static Button Login;
    public static Button myLog;
    private int Counter = 5;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        viewroot = inflater.inflate(R.layout.fragment_admin,container,false);

        Name = (EditText) getActivity().findViewById(R.id.editText);
        Password = (EditText) getActivity().findViewById(R.id.editText2);
        Login = (Button) getActivity().findViewById(R.id.button2);
        myLog = (Button) viewroot.findViewById(R.id.button2);
        myLog.setOnClickListener(this);


        myLog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                validate(Name.getText().toString(), Password.getText().toString());
            }
        });
        return viewroot;
    }



    private void validate (String userName, String userPassword){
        if((userName.equals("Admin")) &&  (userPassword.equals("123"))){
            Intent intent = new Intent(AdminFragment.this.getActivity(), Login.class);
            startActivity(intent); //Login is the second activity
        }
        else {

            Counter --;
            Toast.makeText(getActivity(), "No. of Attempts Left for Login" + String.valueOf(Counter), Toast.LENGTH_SHORT).show();

            if (Counter == 0){
                Login.setEnabled(false);
                Toast.makeText(getActivity(), "For Enable the Login Please Contact..!!", Toast.LENGTH_SHORT).show();

            }
        }
    }

    @Override
    public void onClick(View v) {
        validate(Name.getText().toString(),Password.getText().toString());
    }
}
fragment_admin.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@android:color/background_dark">

    <com.airbnb.lottie.LottieAnimationView
        android:id="@+id/animation_view"
        android:layout_width="185dp"
        android:layout_height="155dp"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center"
        app:lottie_autoPlay="true"
        app:lottie_colorFilter="#FFBC00"
        app:lottie_fileName="user.json"
        app:lottie_loop="true" />


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="17dp"
        android:text="admin login"
        android:textAllCaps="true"
        android:textColor="#FFBA24"
        android:textSize="25dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/editText"

        android:layout_alignStart="@+id/editText2"
        android:layout_marginBottom="-247dp"
        android:text="Enter your username"
        android:textAllCaps="true"
        android:textColor="#B7BE5D"
        android:textSize="15dp" />


    <EditText
        android:id="@+id/editText2"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="183dp"
        android:ems="10"
        android:fontFamily="monospace"
        android:hint="Password"
        android:inputType="textPassword"
        android:textColorHint="#FFFFFF" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/editText2"

        android:layout_alignStart="@+id/editText2"
        android:text="Enter your password"
        android:textAllCaps="true"
        android:textColor="#B7BE5D"
        android:textSize="15dp" />


    <EditText
        android:id="@+id/editText"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="247dp"
        android:ems="10"
        android:fontFamily="monospace"
        android:hint="Username"
        android:inputType="textPersonName"
        android:textColor="#FFFFFF"
        android:textColorHint="#FFFFFF" />

    <EditText
        android:id="@+id/Editinfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="62dp"
        android:text="No. of attempts left : "
        android:textColor="#FFF"
        android:textSize="15dp"
        android:textStyle="italic" />

    <Button
        android:id="@+id/button2"
        android:layout_width="210dp"
        android:layout_height="45dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="111dp"
        android:background="@drawable/rounded_button"
        android:text="login"
        android:textAllCaps="true"
        android:textColor="#000"
        android:visibility="visible" />

    <Button
        android:id="@+id/button"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="#19193E"
        android:text="LOG IN PROBLEM? CONTACT US."
        android:textColor="#FFF"
        android:onClick="onClick"
        android:visibility="visible" />
</RelativeLayout>

应该是这样的

viewroot = inflater.inflate(R.layout.fragment_admin,container,false);
Name = (EditText) viewroot.findViewById(R.id.editText);
        Password = (EditText) viewroot.findViewById(R.id.editText2);
        Login = (Button) viewroot.findViewById(R.id.button2);
        myLog = (Button) viewroot.findViewById(R.id.button2);

您需要在
onCreateView()中使用
viewroot
而不是
getActivity()

使用以下代码:

Name = (EditText) viewroot.findViewById(R.id.editText);
Password = (EditText) viewroot.findViewById(R.id.editText2);
Login = (Button) viewroot.findViewById(R.id.button2);

不能像那样使用
getActivity().findViewById()

onCreateView()
中,您还没有返回片段的视图,这意味着它没有附加到活动
getActivity().findViewById()
返回null,因为该活动当前没有具有该ID的视图。它仅在
viewroot
返回后才会返回,这是在您调用它之后

相反,您可以做以下两件事之一:

  • getActivity()
    替换为
    viewroot

    Name = (EditText) viewroot.findViewById(R.id.editText);
    Password = (EditText) viewroot.findViewById(R.id.editText2);
    Login = (Button) viewroot.findViewById(R.id.button2);
    
  • 将代码移动到
    onViewCreated()
    并继续使用
    getActivity()
    (但是,您应该使用传递的
    view
    变量)

  • 通常,您不希望使用
    getActivity().findViewById()
    。如果需要在该片段中查找视图,请使用
    getView().findViewById()
    。在
    onCreateView()
    返回之前,这两种方法都不起作用


    我还注意到,
    Login
    myLog
    是同一个按钮。您应该指定一个变量,并在需要时调用它。第二个局部变量没有意义

    您还应该尝试以下Java语法指南:

    • 类名使用
      TitleCase
    • 变量和函数名使用
      camelCase

    非常感谢buddy的帮助,这可能是重复的:)