如何才能将数据库实例传递给MyFirebaseMessagingService
扩展的类,FirebaseMessagingService
以便我可以data
在本地保存有效负载?
注意:我已经在我的应用程序中设置了匕首2,它运行正常.
以下是MyFirebaseMessagingService
课程:
class MyFirebaseMessagingService @Inject constructor(exampleOneDao: ExampleOneDao?) : FirebaseMessagingService() {
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
//need db instance to store data payload locally (Room)
}
}
Run Code Online (Sandbox Code Playgroud)
以下是AppModule
Dagger 2 的等级
@Module(includes = arrayOf(ViewModelModule::class))
class AppModule() {
// --- DATABASE INJECTION ---
@Provides
@Singleton
internal fun provideDatabase(application: Application): MyDatabase {
return Room.databaseBuilder(application,
MyDatabase::class.java, "MyDatabase.db")
.build()
}
@Provides
@Singleton
internal fun provideExampleOneDao(database: MyDatabase): ExampleOneDao {
return database.exampleOneDao()
}
@Provides
@Singleton
internal fun …
Run Code Online (Sandbox Code Playgroud) 我有一个基于令牌的Api身份验证(Laravel Passport)的工作代码示例,但没有Dagger2。我想将代码从当前移动RetrofitBuilder.java
到AppModule,以便可以在应用程序中使用Dagger 2的功能。
现在,在没有Dagger依赖的情况下,我有两个静态方法RetrofitBuilder.java
可用于已认证的路由调用和未认证的路由调用:
1)createService(service)
//进行没有授权标头的API调用(无访问令牌)
2)createServiceWithAuth(service, tokenManager)
//进行API的调用具有授权标头,例如具有访问令牌
如何使用Dagger依赖项实现相同的功能。如何实现将上述两种方法提供给我的业务逻辑类,例如,UserRepository.java
以便可以在需要的地方进行经过身份验证和未经身份验证的服务调用。
RetrofitBuilder.java
public class RetrofitBuilder {
private static final String BASE_URL = "https://api.com/";
private final static OkHttpClient client = buildClient();
private final static Retrofit retrofit = buildRetrofit(client);
private static OkHttpClient buildClient(){
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder()
.addHeader("Accept", "application/json")
.addHeader("Connection", "close");
request = builder.build();
return …
Run Code Online (Sandbox Code Playgroud)