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

MyFirebaseInstanceIDService无默认构造函数问题及相关代码求助

解决FirebaseInstanceIdService无默认构造函数的问题

嘿,这个问题我之前踩过坑!原因很明确:Firebase的服务类(比如你的MyFirebaseInstanceIDService)是由Android系统负责实例化的,系统只会调用无参的默认构造函数,但你自定义了带Context参数的构造函数,Java就不会自动生成默认的无参构造函数了,系统找不到它,自然就抛出这个错误啦。

修复步骤

  • 删掉你自定义的带Context参数的构造函数,因为Service本身就是Context的子类,直接用getApplicationContext()就能拿到上下文,完全不需要手动传入。
  • 调整storeToken方法,用服务自身的上下文来操作SharedPreference。

修正后的完整代码

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { 
    private static final String TAG = "MyFirebaseIIDService"; 

    // 保留系统需要的默认无参构造(这里可以显式写出,也可以省略,Java会自动生成)
    public MyFirebaseInstanceIDService() {
        // 空构造函数,供系统实例化服务使用
    }

    @Override 
    public void onTokenRefresh() { 
        super.onTokenRefresh(); 
        String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
        storeToken(refreshedToken); 
    } 

    private void storeToken(String token) {
        // 用全局应用上下文操作SharedPreference,避免内存泄漏
        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("DeviceTokenPrefs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("device_token", token);
        editor.apply();
    }
}

额外提醒

别忘了在AndroidManifest.xml里正确注册这个服务,不然系统找不到它:

<service
    android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

内容的提问来源于stack exchange,提问作者YVS1102

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:46:00