MyFirebaseInstanceIDService get没有默认构造函数

时间:2018-03-29 06:43:24

标签: android firebase

所以,我有这门课。此类会将device token保存为共享首选项。

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

    Context myCon;

    public MyFirebaseInstanceIDService(Context mCon){
        this.myCon=mCon;
    }

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

    private void storeToken(String token) {
        SessionHandler.getInstance(myCon).saveDeviceId(token);
    }
}

以下是我如何在其他活动中使用该课程

MyFirebaseInstanceIDService firebaseService = new MyFirebaseInstanceIDService(Login_activity.this);
firebaseService.onTokenRefresh();

这是我的清单

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

所以,在上面的清单中,我收到了这条消息

  

MyFirebaseInstanceIDService没有默认构造函数

我该如何解决?提前谢谢

5 个答案:

答案 0 :(得分:2)

您不需要直接调用服务对象。一旦您在清单文件中声明它,Android将处理您的服务。

您也不需要添加构造函数来传递上下文,因为服务将在其中提供上下文。

如果你需要强行刷新令牌(它会抛出错误在主线程上运行,所以使用异步任务或使用其他线程):

FirebaseInstanceId.getInstance().deleteInstanceId();
FirebaseInstanceId.getInstance().getToken();

刷新令牌后,方法public void onTokenRefresh()将被调用,您的内部功能将会运行。

答案 1 :(得分:1)

MyFirebaseInstanceIDService

中添加此行
public MyFirebaseInstanceIDService(){

    }

答案 2 :(得分:0)

您不需要定义构造函数。你的课应该就像

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    private static final String TAG = "MyFirebaseIIDService";
    @Override
    public void onTokenRefresh() {
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        Log.d(TAG, "Refreshed token: " + refreshedToken);
        sendRegistrationToServer(refreshedToken);
    }

    private void sendRegistrationToServer(String token) {
        Log.d("mDeviceToken", token);

    }
}

不需要

  MyFirebaseInstanceIDService firebaseService = new MyFirebaseInstanceIDService(Login_activity.this);
    firebaseService.onTokenRefresh();

您只需要在OnTokenRefresh()中保存您的令牌(可能在sharedPreference中)。

答案 3 :(得分:0)

无需调用MyFirebaseInstanceIDService类

您可以从任何活动中获取Device Token ...

String deviceToken = FirebaseInstanceId.getInstance().getToken();

答案 4 :(得分:0)

参见Clas Architecture。

<main></main>

public class FirebaseInstanceIdService extends Service FirebaseInstanceIdService因此您不必将Service传递给它,因为它有自己的Context所以您不必拥有参数化构造函数

如果您没有任何构造函数,编译器会自动注入默认的构造函数。而已 。保持简单。

Context