Android按钮触发ViewPostImeInputStage ACTION_DOWN错误,Firebase数据加载失败
问题描述
尝试从Firebase Realtime Database加载数据到设备,编写了按钮点击事件代码,但点击按钮时仅出现ViewPostImeInputStage ACTION_DOWN错误。已尝试在布局中添加android:focusable="true"、android:focusableInTouchMode="true"属性,以及添加覆盖按钮的View方案,均无效,寻求解决方法。
相关代码
load.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String a = emailString.replace(".", ""); Query recentPostsQuery = database.child("User").child(a); ValueEventListener listener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snapshot : dataSnapshot.getChildren()) { User value = dataSnapshot.getValue(User.class); Toast.makeText(More.this, "User-loaded data", Toast.LENGTH_SHORT).show(); PreferenceConfig.T_62_M1_2_1(getApplicationContext(), T_62_M1_2_1); PreferenceConfig.T_62_MK(getApplicationContext(), T_62_MK); PreferenceConfig.T_62_MB(getApplicationContext(), T_62_MB); PreferenceConfig.T_62_MB_1(getApplicationContext(), T_62_MB_1); PreferenceConfig.T_62_MD(getApplicationContext(), T_62_MD); } } @Override public void onCancelled(@NonNull DatabaseError error) { Toast.makeText(More.this,"Err",Toast.LENGTH_SHORT).show(); } }; database.addValueEventListener(listener); } });
解决建议
- 修正Firebase数据获取逻辑:循环中错误使用了外层的
dataSnapshot.getValue(User.class),应改为使用循环内的snapshot.getValue(User.class),否则无法正确遍历子节点数据:User value = snapshot.getValue(User.class); - 完善数据存储逻辑:目前调用
PreferenceConfig的方法时,传入的T_62_M1_2_1等变量未从Firebase获取的User对象中赋值,等于没有存储加载到的数据。需要先从User对象中取出对应属性,再传入方法:// 示例,根据User类的实际属性调整 PreferenceConfig.T_62_M1_2_1(getApplicationContext(), value.getT62M121()); - 替换监听类型:使用
addListenerForSingleValueEvent替代addValueEventListener,因为仅需要加载一次数据,后者会持续监听数据变化,易导致内存泄漏:recentPostsQuery.addListenerForSingleValueEvent(listener); - 处理UI焦点与软键盘问题:
ViewPostImeInputStage ACTION_DOWN错误常与输入控件焦点相关,若布局中有EditText等输入框,可在按钮点击时隐藏软键盘,避免焦点冲突:InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); - 检查User类序列化配置:确保
User类有无参构造函数,以及所有需要序列化的属性都有对应的getter/setter方法,否则Firebase无法正确解析数据。
内容的提问来源于stack exchange,提问作者Dmytro Parkhomenko
相关产品推荐
相关产品推荐

