当前,我正在一个项目中尝试同时使用dagger(hilt)和parseServer SDK。问题是我认为不可能在一个项目中使用这种组合...
以下是我的看法,为什么我认为这是不可能的,至少在某种程度上,并且知道我希望做到这一点:
在使用Parse SDK并创建类时,必须使用@ParseClasssName("YourDBClassName")
对其进行注释。调用onCreate()
之前,必须在ParseObject.registerSubclass(YourClassName::class.java)
中向Parse.initialize...
注册该自定义类。
现在出现了我的问题:使用匕首(hilt)并创建此customClass时,必须在调用@Inject lateinit var YourClassName
之前将其插入onCreate()
中。但是,当您在调用inject
解析之前onCreate()
调用此customClass时,会引发错误,因为1.它不知道此类是一个customClass,并且2.必须在{{1 }}方法。
为了更清楚一点,这是我的代码以及我想要实现的目标:
onCreate()
@ParseClassName("User")
data class User(var name: String, var passWord: String, var eMail: String) : ParseUser() {
@Inject constructor(): this("","","")
// Creates a new User
fun signUpWithOutVerification() = apply {
username = name
setPassword(passWord)
email = eMail
signUpInBackground()
}
// logIn
fun logIn() = logInInBackground(name, passWord) ?: Timber.e("logIn Error")
// logOut
fun logOut() = logOutInBackground() ?: Timber.e("logOut Error")
// Update
fun updateCredential(key: String, value: Any) = getCurrentUser().apply {
put(key, value)
saveInBackground()
} ?: Timber.e("Update failed")
// Delet and Logout
fun deleteUser() = getCurrentUser().apply {
deleteInBackground()
logOut()
} ?: Timber.e("Delete failed")
@Module
@InstallIn(ApplicationComponent::class)
object ApplicationModule {
@Provides
@Singleton
fun provideUser() = User()
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var user: User
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ParseObject.registerSubclass(User::class.java)
Parse.initialize(
Parse.Configuration.Builder(this)
.applicationId("YourAppKey")
.clientKey("YourClientKey")
.server("https://parseapi.back4app.com")
.build()
)
Timber.plant(Timber.DebugTree())
lateinit var userName: String
lateinit var userPw: String
btn_signup.setOnClickListener {
userName = etName.text.toString()
userPw = etPassword.text.toString()
user.apply{
name = userName
passWord = userPw
eMail = "$userName@email.com"
signUpWithOutVerification()
}
}
@HiltAndroidApp
class App : Application()
因此,我可能不具备编写所需代码的知识。我想做的是,用匕首(hilt)创建User +并获取其Name等...
感谢您的帮助,谢谢!
答案 0 :(得分:1)
您应将registerSubclass()
代码移至application
类。
您的application
课程:
@HiltAndroidApp
class App : Application() {
override fun onCreate() {
super.onCreate()
ParseObject.registerSubclass(User::class.java)
Parse.initialize(
Parse.Configuration.Builder(this)
.applicationId("YourAppKey")
.clientKey("YourClientKey")
.server("https://parseapi.back4app.com")
.build()
)
}
}
在清单文件中:-
<application
android:name=".App"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
....