java - 仅在 api 19 中单击按钮时发生 IllegalStateException

标签 java android onclick illegalstateexception

仅在 android 4.4 kitKat 中单击按钮时出现 IllegalStateException ,我已在 andorid 9.0、android 8.0、android 7.0 和 android 5.1 上尝试过,它在这些设备上工作正常,但错误是仅发生在 Android Kitkat 上。我不确定我的代码有什么问题,请帮助,我的应用程序正在生产中。

日志由 firebase testLab 生成,因为我没有 4.4 设备:


    at androidx.appcompat.app.AppCompatViewInflater$a.onClick(:2)
       FATAL EXCEPTION: ControllerMessenger
       Process: in.co.poket_play, PID: 31314
       java.lang.IllegalStateException: Could not execute method for android:onClick
           at androidx.appcompat.app.AppCompatViewInflater$a.onClick(:2)
           at android.view.View.performClick(View.java:4626)
           at android.view.View$PerformClick.run(View.java:19293)
           at android.os.Handler.handleCallback(Handler.java:733)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at androidx.test.espresso.base.Interrogator.a(Interrogator.java:19)
           at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:166)
           at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:158)
           at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:34)
           at androidx.test.espresso.action.MotionEvents.a(MotionEvents.java:77)
           at androidx.test.espresso.action.MotionEvents.a(MotionEvents.java:52)
           at androidx.test.espresso.action.Tap.c(Tap.java:8)
           at androidx.test.espresso.action.Tap.b(Tap.java:18)
           at androidx.test.espresso.action.Tap$1.a(Tap.java:3)
           at androidx.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:20)
           at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:9)
           at androidx.test.espresso.ViewInteraction.a(ViewInteraction.java:79)
           at androidx.test.espresso.ViewInteraction.a(ViewInteraction.java:96)
           at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:3)
           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
           at android.os.Handler.handleCallback(Handler.java:733)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at android.os.Looper.loop(Looper.java:157)
           at android.app.ActivityThread.main(ActivityThread.java:5293)
           at java.lang.reflect.Method.invokeNative(Native Method)
           at java.lang.reflect.Method.invoke(Method.java:515)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
           at dalvik.system.NativeStart.main(Native Method)
       Caused by: java.lang.reflect.InvocationTargetException
           at java.lang.reflect.Method.invokeNative(Native Method)
           at java.lang.reflect.Method.invoke(Method.java:515)
           ... 29 more
       Caused by: java.lang.NullPointerException: println needs a message
           at android.util.Log.println_native(Native Method)
           at android.util.Log.e(Log.java:298)
           at in.co.poket_play.login_and_register.UserProfileActivity.saveData(:4)

创建时:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_profile);

        profileImage  = findViewById(R.id.profileImage);
        fieldUsername = findViewById(R.id.textName);
        fieldAge = findViewById(R.id.textAge);
        fieldEmail = findViewById(R.id.textEmail);
        sexGroup = findViewById(R.id.genderGroup);
        maleBtn = findViewById(R.id.genderMale);
        femaleBtn = findViewById(R.id.genderFemale);

        mAuth = FirebaseAuth.getInstance();
        functions = new FirebaseFunctions(this);

        setProfileData();


    }

这是 OnClick 方法:

public void saveData(View view){

    try {
        boolean isChanged = true;
        RadioButton radioSexButton = findViewById(sexGroup.getCheckedRadioButtonId());
        String newUsername = fieldUsername.getText().toString().trim();
        String newAge = fieldAge.getText().toString().trim();
        String newGender = radioSexButton.getText().toString().trim();



    if(newUsername.length() > 0){
        if(!newUsername.equals(username)) {
            functions.updateUsername(newUsername);
            isChanged = true;
        }
    }else {
        fieldUsername.setError("Invalid username");
        isChanged = false;
    }


    if(newAge.length() > 0){
        if(!newAge.equals(String.valueOf(age))) {
            functions.updateAge(Integer.parseInt(newAge));
            isChanged = true;
        }
    }else {
        fieldAge.setError("Invalid Age");
        isChanged = false;
    }


    if(!newGender.equalsIgnoreCase(gender)){
        functions.updateGender(newGender);
        isChanged = true;
    }


    if(isChanged){
        Toast.makeText(this, "Details Saved", Toast.LENGTH_SHORT).show();
        finish();
    }

    }catch (Exception e){
        Log.e("ERROR",e.getLocalizedMessage());
    }

}

这是 setProfileData 方法:

private void setProfileData(){

        FirebaseFirestore db = FirebaseFirestore.getInstance();
        DocumentReference docRef = db.collection(getString(R.string.db_users)).document(Objects.requireNonNull(mAuth.getCurrentUser()).getUid());
        listener = docRef.addSnapshotListener(new EventListener<DocumentSnapshot>() {
            @Override
            public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {

                if (documentSnapshot != null) {
                    User user = documentSnapshot.toObject(User.class);

                    if (user != null) {

                        username = user.getUsername();
                        email = user.getEmail();
                        age = user.getAge();
                        gender = user.getGender();

                        Glide.with(getApplicationContext())
                                .load(user.getProfile_image_url())
                                .placeholder(R.drawable.com_facebook_profile_picture_blank_square)
                                .into(profileImage);

                        fieldUsername.setText(username);
                        fieldEmail.setText(email);
                        fieldAge.setText(String.valueOf(age));

                        if (gender.equalsIgnoreCase(getString(R.string.textMale))) {
                            maleBtn.setChecked(true);
                        } else if (gender.equalsIgnoreCase(getString(R.string.textFemale))) {
                            femaleBtn.setChecked(true);
                        }

                    }
                }
            }
        });

    }

最佳答案

问题可能不存在于您正在寻找的地方。您应该查看每个“原因”陈述。

Caused by: java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.e(Log.java:298)
        at in.co.poket_play.login_and_register.UserProfileActivity.saveData(:4)

你应该看看这个包 - in.co.poket_play.login_and_register.UserProfileActivity.saveData 并检查您的 saveData 方法是否存在此异常。-“NullPointerException”

关于java - 仅在 api 19 中单击按钮时发生 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57490044/

相关文章:

javascript - 如何在不影响父元素的情况下为子元素设置不同的 onClick 事件?

javascript - 移动滚动条固定元素底部透明开口

javascript - 当用户单击链接时更改 href

java - Comparable vs Number,设计选择

java - 如何从 JBOSS CLI 调用 JMS 临时队列上的操作

java - Android Studio 4完整的离线设置

android - 有没有办法以 dpi 为单位获取屏幕尺寸

javascript - jquery,防止父元素上的 onclick=window.location

java - 如何同时比较一个变量和两个值?

java - java中使用maven解决依赖关系