Android Studio报错:类声明多个同名JSON字段'mLifecycleRegistry'
问题原因
你遇到的mLifecycleRegistry字段冲突,本质是错误地将ReceptionFerraillage这个Activity类当作数据对象存储:
- Activity是Android的界面组件,继承链中同时引入了
androidx.activity.ComponentActivity和androidx.core.app.ComponentActivity,这两个类都包含同名的mLifecycleRegistry字段,序列化工具(如Gson)处理时会触发冲突。 - 更关键的是:Activity负责界面逻辑,根本不应该被当作数据模型来存入HashMap。
解决步骤
1. 拆分纯数据模型类
新建一个只负责存储检查数据的类(与Activity完全分离),比如ReceptionFerraillageData:
package com.example.suivitravaux; import java.io.Serializable; public class ReceptionFerraillageData implements Serializable { public String Plan; public String Cal; public String Enr; public String Rec; public String Rem; // 空构造方法(序列化必备) public ReceptionFerraillageData() {} // 带参数构造方法,方便初始化 public ReceptionFerraillageData(String plan, String cal, String enr, String rec, String rem) { Plan = plan; Cal = cal; Enr = enr; Rec = rec; Rem = rem; } }
2. 修改ReceptionFerraillage Activity逻辑
移除Serializable实现,用上面的数据类存储业务数据,不再把Activity对象存到HashMap:
package com.example.suivitravaux; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class ReceptionFerraillage extends AppCompatActivity implements View.OnClickListener { private RadioGroup plan, cal, enr, rec; // 用纯数据类存储检查结果 private ReceptionFerraillageData data; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.reception_ferraillage); plan = findViewById(R.id.fer_plan); cal = findViewById(R.id.fer_cal); enr = findViewById(R.id.fer_enr); rec = findViewById(R.id.fer_rec); Button btnOk = findViewById(R.id.ok); btnOk.setOnClickListener(this); // 初始化数据对象 data = new ReceptionFerraillageData(); } // 从界面读取数据并更新到数据类 private void updateDataFromUI() { RadioButton radioButtonPlan = findViewById(plan.getCheckedRadioButtonId()); data.Plan = radioButtonPlan.getText().toString(); RadioButton radioButtonCal = findViewById(cal.getCheckedRadioButtonId()); data.Cal = radioButtonCal.getText().toString(); RadioButton radioButtonEnr = findViewById(enr.getCheckedRadioButtonId()); data.Enr = radioButtonEnr.getText().toString(); RadioButton radioButtonRec = findViewById(rec.getCheckedRadioButtonId()); data.Rec = radioButtonRec.getText().toString(); } @Override public void onClick(View v) { updateDataFromUI(); Toast.makeText(this, data.Plan, Toast.LENGTH_SHORT).show(); // 示例:将数据返回给上一页或存入HashMap // 比如存入HashMap:yourHashMap.put("ferraillage_data", data); // 或通过Intent返回: // Intent intent = new Intent(); // intent.putExtra("ferraillage_data", data); // setResult(RESULT_OK, intent); // finish(); } }
3. 修正数据存储逻辑
后续存储时,将ReceptionFerraillageData对象存入HashMap<String, Object>,而非Activity对象,即可避免序列化冲突。
4. 额外修复:错误的newInstance方法
原来的newInstance方法完全错误——直接new Activity对象并调用findViewById会触发空指针(Activity未绑定Context、未加载布局)。启动Activity必须用Intent:
// 正确启动ReceptionFerraillage的方式 Intent intent = new Intent(context, ReceptionFerraillage.class); context.startActivity(intent);
内容的提问来源于stack exchange,提问作者ra2p57
相关产品推荐
相关产品推荐

