从片段调用Intent时出错(用户登录)

时间:2018-10-26 14:14:53

标签: android android-intent onclick onclicklistener

从Fragment调用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>

3 个答案:

答案 0 :(得分:1)

您不能像这样使用getActivity().findViewById()

onCreateView()内部,您尚未返回Fragment的View,这意味着它尚未附加到Activity。 getActivity().findViewById()返回null,因为该活动当前没有具有该ID的视图。只有在您调用viewroot后,它才会返回。

相反,您可以执行以下两项操作之一:

  1. getActivity()替换为viewroot

    Name = (EditText) viewroot.findViewById(R.id.editText);
    Password = (EditText) viewroot.findViewById(R.id.editText2);
    Login = (Button) viewroot.findViewById(R.id.button2);
    
  2. 将您的代码移至onViewCreated()并继续使用getActivity()(不过,您应该使用传递的view变量)。

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


我还注意到LoginmyLog都是同一个按钮。您应该分配一个变量,并在需要时调用它。第二个局部变量毫无意义。

您还应该尝试遵循Java的语法准则:

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

答案 1 :(得分:0)

应该是这样

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);

答案 2 :(得分:0)

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

使用以下代码:

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