You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:47:46