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
相关产品推荐
相关产品推荐

