Ошибка при вызове Intent из фрагмента (логин пользователя) - PullRequest
0 голосов
/ 26 октября 2018

Я получил ошибку при вызове намерения из фрагмента. Ниже приведены ошибки журнала того же самого. Ниже приведены фрагменты кода из тех же действий. Приложение автоматически отключается, когда я нажимаю на кнопку «Войти». Пожалуйста, помогите мне. Заранее спасибо.

Журнал отчетов

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 голосов
/ 26 октября 2018

Вам нужно использовать viewroot вместо getActivity() в onCreateView().

Используйте следующий код:

Name = (EditText) viewroot.findViewById(R.id.editText);
Password = (EditText) viewroot.findViewById(R.id.editText2);
Login = (Button) viewroot.findViewById(R.id.button2);
0 голосов
/ 26 октября 2018

Вы не можете использовать getActivity().findViewById() таким образом.

Внутри onCreateView() вы еще не вернули просмотр фрагмента, то есть он не присоединен к действию. getActivity().findViewById() возвращает значение NULL, поскольку в данный момент у Activity нет представления с этим идентификатором Это произойдет только после возврата 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().


Я также заметил, что и Login, и myLog - это одна и та же кнопка. Вы должны назначить одну переменную и вызывать ее при необходимости. Нет смысла во второй локальной переменной.

Вам также следует попробовать следовать правилам синтаксиса Java:

  • Использование имен классов TitleCase
  • Использование имен переменных и функций camelCase
0 голосов
/ 26 октября 2018

должно быть так

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