简体   繁体   English

Android-Java:java.lang.IllegalStateException:无法执行 android 的方法:onClick

[英]Android-Java: java.lang.IllegalStateException: Could not execute method for android:onClick

I am trying to make a sign up form in a fragment in a view Pager.我正在尝试在视图寻呼机的片段中制作注册表单。 The form has four text fields and a button, I am getting the above mentioned exception when the button is clicked.该表单有四个文本字段和一个按钮,单击按钮时出现上述异常。 The onClick method is registerUser(View view) defined in the class below. onClick方法是下面class中定义的registerUser(View view)。

ViewPager Activity 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);
    }
}

View Pager Adapter查看寻呼机适配器

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 referring to Exception 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)**

Here's the line这是行

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

UPDATE I tried the suggestions below, moving the register functionality to signupFragment.更新我尝试了以下建议,将注册功能移至 signupFragment。 It generates the following exception.它会生成以下异常。

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)

It's better don't create fragment in getItem().最好不要在 getItem() 中创建片段。 And It's better to use FragmentStatePagerAdapter.并且最好使用 FragmentStatePagerAdapter。 So I changed your adapter code to like it.所以我改变了你的适配器代码来喜欢它。

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
    }
}

Please change your code, retry.请更改您的代码,然后重试。

The problem is solved after implementing onClickListener instead of using Onclick in xml.在xml中实现onClickListener而不是使用Onclick后问题解决。 Further notes进一步说明

  1. Implement The onClickListener in Fragment.在 Fragment 中实现 onClickListener。
  2. Use on click Listener in java instead of onClick in xml.在 java 中使用点击监听器,而不是在 xml 中使用 onClick。
  3. use ViewGroup root = (ViewGroup) inflater.inflate(R.layout.signup_fragment, null);使用 ViewGroup root = (ViewGroup) inflater.inflate(R.layout.signup_fragment, null); root.findViewById() in fragment片段中的 root.findViewById()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.IllegalStateException:无法执行android:onClick的方法 - java.lang.IllegalStateException: Could not execute method for android:onClick in android java.lang.IllegalStateException:无法为 android 执行方法:onClick / ZE84E30B9390CDB67ZDDB6 - java.lang.IllegalStateException: Could not execute method for android:onClick / Android 错误:java.lang.IllegalStateException:无法执行android:onClick的方法 - Error: java.lang.IllegalStateException: Could not execute method for android:onClick Kotlin-java.lang.IllegalStateException:无法执行android:onClick的方法 - Kotlin - java.lang.IllegalStateException: Could not execute method for android:onClick Android Studio 3.1.3 中的错误。 java.lang.IllegalStateException: 无法执行 android:onClick 的方法 - Error in Android Studio 3.1.3. java.lang.IllegalStateException: Could not execute method for android:onClick ANDROID意图致命错误!!! java.lang.IllegalStateException: 无法执行 android:onClick 的方法 - ANDROID INTENTION FATAL ERROR!!! java.lang.IllegalStateException: Could not execute method for android:onClick Android Studio 问题; java.lang.IllegalStateException: 无法执行 android:onClick 的方法 - Android Studio problem ; java.lang.IllegalStateException: Could not execute method for android:onClick Android Studio Application - java.lang.IllegalStateException: Could not execute method for android:onClick - Not a Null Pointer Exception - Android Studio Application - java.lang.IllegalStateException: Could not execute method for android:onClick - Not a Null Pointer Exception Android:java.lang.IllegalStateException:无法执行活动的方法 - Android: java.lang.IllegalStateException: Could not execute method of the activity Android java.lang.IllegalStateException:无法执行活动的方法 - Android java.lang.IllegalStateException: Could not execute method of the activity
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM