迁移到AndroidX后,我面临以下问题与Google Auth lib:
在Android 9 API 28上:
java.lang.IncompatibleClassChangeError: Class 'com.google.android.gms.auth.api.signin.internal.SignInHubActivity' does not implement interface 'androidx.lifecycle.LifecycleOwner' in call to 'androidx.lifecycle.Lifecycle androidx.lifecycle.LifecycleOwner.getLifecycle()' (declaration of 'androidx.lifecycle.LiveData' appears in /data/app/fourbottles.bsg.workinghours4b-G1onPKgFFE-l3aqjx0qDJw==/split_lib_dependencies_apk.apk)
at androidx.lifecycle.LiveData.observe(LiveData.java:172)
at androidx.loader.app.LoaderManagerImpl$LoaderInfo.setCallback(LoaderManagerImpl.java:100)
at androidx.loader.app.LoaderManagerImpl.createAndInstallLoader(LoaderManagerImpl.java:400)
at androidx.loader.app.LoaderManagerImpl.initLoader(LoaderManagerImpl.java:421)
at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.zzn(Unknown Source:80)
at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.onActivityResult(Unknown Source:68)
at android.app.Activity.dispatchActivityResult(Activity.java:7454)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4353)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)
在Android 5.0.2 API 22上
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.lifecycle.Lifecycle$State …Run Code Online (Sandbox Code Playgroud) android kotlin android-support-library androidx google-auth-library
我想知道是否可以在Swift中完成类似java(或c ++)的事情:
我有一个协议:
protocol Prot1 {
func returnMyself() -> Prot1
}
Run Code Online (Sandbox Code Playgroud)
一个类符合协议Prot1.我可以强制函数的返回类型returnMyself()与下面的类的类型相同吗?
class MyClass: Prot1 {
public func returnMyself() -> MyClass {
return self
}
}
Run Code Online (Sandbox Code Playgroud)
可能吗?
我正在使用Firebase数据库服务来同步用户数据.我启用了离线兼容性,问题是在使用几个月后,用户数据显然没有提交到在线数据库,因为用户电话系统阻止了应用程序的互联网连接.
在某些情况下,我设法引导用户启用"无限数据使用"选项,但并不适用于所有人.
在我的情况下,问题是听众:
void onDataChange(DataSnapshot var1);
Run Code Online (Sandbox Code Playgroud)
ValueEventListener当大量数据脱机存储而未提交时,不会触发from ,并阻止所有行为.
我没有在线存储限制,因为我有Blaze计划(支付消费).
事务也未提交,并触发"事务被后续集覆盖",错误代码为-9.
Firebase提供的连接检测器始终打印"未连接"
我也尝试过替代goOffline(),goOnline()但没有任何反应.
我不明白为什么手机会阻止我的应用程序同步,让像Facebook和Youtube这样的应用程序消耗大量的互联网数据.
此行为仅在Android设备上发生,在使用相同Firebase数据库的iOS手机上没有问题.
无法使用4g,WI-FI或VPN(使用Opera VPN).
更新1:
日志在启动时包含~10次:
11-13 21:12:28.477 15765 15856 D PersistentConnection: pc_0 - Scheduling connection attempt
11-13 21:12:28.477 15765 15856 D ConnectionRetryHelper: Scheduling retry in 26091ms
11-13 21:12:54.597 15765 15856 D PersistentConnection: pc_0 - Trying to fetch auth token
11-13 21:12:55.747 15765 15856 D PersistentConnection: pc_0 - Error fetching token: An internal error has occurred. [
TOKEN_EXPIRED ] …Run Code Online (Sandbox Code Playgroud) 我有第一个协议
protocol Prot1
{
}
Run Code Online (Sandbox Code Playgroud)
第二个:
protocol Prot2
{
associatedtype P: Prot1
func doSomething(param: P)
}
Run Code Online (Sandbox Code Playgroud)
如何制作Prot2类型的数组?
我试过了:
var myArray = [Prot2]()
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误:协议Prot2只能用作通用约束,因为它具有Self或相关类型要求
有没有其他方法来制作模板协议?
编辑:
对不起,如果我迟到了,但我正在测试解决方案.据我所知,类型擦除
AnyProt2<Prot1Type: Prot1>: Prot2
Run Code Online (Sandbox Code Playgroud)
让我有一个数组
[AnyProt2<Prot1Class>]
Run Code Online (Sandbox Code Playgroud)
但我要的是一个可以包含各种AnyProt2的数组:
[AnyProt2] or [AnyProt2<Prot1>]
Run Code Online (Sandbox Code Playgroud)
我尝试了第二次,但它给了我:
不支持使用'Prot1'作为符合协议'Prot1'的具体类型.
在我的上下文中,Prot1是Interval,而Prot2是一个事件,所以我想拥有和使用不同类型的可能具有不同种类间隔的事件的数组.我还想询问是否可以使Prot1扩展Equatable并在AnyProt2中确认协议.