Android Java:Java.lang.IollegalStateException:无法执行Android的方法



我正试图在视图Pager的片段中制作一个注册表单。表单有四个文本字段和一个按钮,当单击按钮时,我会得到上面提到的异常。onClick方法是在下面的类中定义的registerUser(视图视图(。

ViewPager活动

public class getStarted extends AppCompatActivity {
TextInputEditText n,p,e,a;
SignInButtonImpl btn;
MaterialCheckBox tc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.get_started);
n= findViewById(R.id.sname);
p= findViewById(R.id.spass);
e= findViewById(R.id.semail);
a= findViewById(R.id.sage);
btn= findViewById(R.id.signup);
tc=findViewById(R.id.tc);
getStartedPagerAdapter pageAdapter = new getStartedPagerAdapter(getSupportFragmentManager());
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(pageAdapter);
}
public void registerUser(View view) {
//Name validation check
if(n.getText().toString().trim().equals("")){
n.setError("Name is Required");
n.requestFocus();
return;
}
//Password Validation Checks
if(p.getText().toString().trim().equals("")){
p.setError("Password is Required");
p.requestFocus();
return;
}
if(p.getText().toString().trim().length()<6){
p.setError("Password must be at least 6 characters");
p.requestFocus();
return;
}
//Age Validation Check
if(a.getText().toString().trim().equals("")){
a.setError("Age is Required");
a.requestFocus();
return;
}
if(a.getText().toString().trim()!="") {
if (Integer.parseInt(a.getText().toString().trim()) <= 0) {
a.setError("Please enter a valid age.");
a.requestFocus();
return;
}
}
//Email Validation Check
if(e.getText().toString().trim() == ""){
e.setError("Email is Required");
e.requestFocus();
return;
}
if(!Patterns.EMAIL_ADDRESS.matcher( e.getText().toString().trim()).matches()){
e.setError("Please Enter a valid Email Address");
e.requestFocus();
return;
}
//Terms and Conditions Validation Check
if(!tc.isChecked()){
tc.setError("Agree To continue.");
tc.requestFocus();
return;
}

System.out.println("Button Working");
}
}

SignupFragment

public class signupFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.signup_fragment, container, false);
}
}

查看寻呼机适配器

public class getStartedPagerAdapter extends FragmentPagerAdapter {
public getStartedPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return new signupFragment();
case 1:
return new loginFragment();
}
return null;
}
@Override
public int getCount() {
return 2; // since we have three fragments
}
}

Logcat引用异常

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rehnsehan, PID: 24606
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at androidx.fragment.app.FragmentTransaction.doAddOp(FragmentTransaction.java:161)
at androidx.fragment.app.BackStackRecord.doAddOp(BackStackRecord.java:179)
at androidx.fragment.app.FragmentTransaction.add(FragmentTransaction.java:156)
at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:172)
at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1224)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
at android.view.View.measure(View.java:25466)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:25466)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
at android.view.View.measure(View.java:25466)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957)
at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:490)
at android.view.View.measure(View.java:25466)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:25466)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:25466)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:747)
at android.view.View.measure(View.java:25466)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3397)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2228)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2486)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1952)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8171)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:972)
at android.view.Choreographer.doCallbacks(Choreographer.java:796)
at android.view.Choreographer.doFrame(Choreographer.java:731)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I've initialized all views and I am not sure what is causing this exception. Anyone Please help, much appreciated. I also got this error statement,
**Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable com.google.android.material.textfield.TextInputEditText.getText()' on a null object reference
at com.example.rehnsehan.getStarted.registerUser(getStarted.java:38)**

这是

if(n.getText().toString().trim().equals(""))

UPDATE我尝试了下面的建议,将寄存器功能转移到signupFragment。它生成以下异常。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rehnsehan, PID: 28540
java.lang.IllegalStateException: Could not find method registerUser(View) in a parent or ancestor Context for android:onClick attribute defined on view class com.google.android.gms.common.internal.SignInButtonImpl with id 'signup'
at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:6302)
at android.view.View$DeclaredOnClickListener.onClick(View.java:6259)
at android.view.View.performClick(View.java:7448)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

最好不要在getItem((中创建片段。最好使用FragmentStatePagerAdapter。所以我把你的适配器代码改成了喜欢的。

public class getStartedPagerAdapter extends FragmentStatePagerAdapter {
private Fragment signup = new signupFragment();
private Fragment login = new LoginFragment();
public getStartedPagerAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return signup;
case 1:
return login;
}
return null;
}
@Override
public int getCount() {
return 2; // since we have three fragments
}
}

请更改您的代码,然后重试。

实现onClickListener而不是在xml中使用Onclick后,问题得到了解决。补充说明

  1. 在Fragment中实现onClickListener
  2. 在java中使用onClick Listener,而不是在xml中使用onClick
  3. use ViewGroup root=(ViewGroup(inflater.inflate(R.layout.signup_fragment,null(;片段中的root.findViewById((

最新更新