从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>
答案 0 :(得分:1)
您不能像这样使用getActivity().findViewById()
。
在onCreateView()
内部,您尚未返回Fragment的View,这意味着它尚未附加到Activity。 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
答案 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);