[英]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
进一步说明
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.