Syncano Android 使用自定义 class 的社交登录导致错误
Syncano Android Social Login with custom class results in error
Syncano 中的社交登录不适用于自定义配置文件。我使用 SocialAuthBackend.FACEBOOK
并传递带有自定义 class 的令牌,例如:
@SyncanoClass(name = "user_profile")
public class UserProfile extends AbstractUser {
}
一起为:
syncano.loginSocialUser(UserProfile.class, SocialAuthBackend.FACEBOOK, loginResult.getAccessToken().getToken()).sendAsync(new SyncanoCallback<UserProfile>() {
//...
});
这导致:
IllegalArgumentException: field com.syncano.library.data.AbstractUser.profile has type com.syncano.library.data.Profile, got com.google.gson.internal.LinkedTreeMap
at java.lang.reflect.Field.set(Native Method)
at java.lang.reflect.Field.set(Field.java:557)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.read(ReflectiveTypeAdapterFactory.java:119)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:217)
at com.google.gson.Gson.fromJson(Gson.java:861)
at com.google.gson.Gson.fromJson(Gson.java:826)
at com.google.gson.Gson.fromJson(Gson.java:775)
at com.google.gson.Gson.fromJson(Gson.java:747)
无法使用此功能(或相关文档)修复它或在线找到任何示例。
当您想声明自己的用户配置文件时,您应该创建 2 class:
- 实施
AbstractUser<T>
(其中 T
是您的个人资料 class 名称)
- 你自己的 class
UserProfile
class with extend Profile
class (from syncano package
).
示例代码:
@SyncanoClass(name = "user_profile")
public class MyUserProfile extends Profile {
@SyncanoField(name = "avatar")
public SyncanoFile avatar;
}
public class CustomUser extends AbstractUser<MyUserProfile> {
public CustomUser(String login, String pass) {
super(login, pass);
}
}
即将发布:
从版本 4.0.6(尚未发布)开始,您不再需要配置文件中的 @SyncanoClass 注释(可选)。
Syncano 中的社交登录不适用于自定义配置文件。我使用 SocialAuthBackend.FACEBOOK
并传递带有自定义 class 的令牌,例如:
@SyncanoClass(name = "user_profile")
public class UserProfile extends AbstractUser {
}
一起为:
syncano.loginSocialUser(UserProfile.class, SocialAuthBackend.FACEBOOK, loginResult.getAccessToken().getToken()).sendAsync(new SyncanoCallback<UserProfile>() {
//...
});
这导致:
IllegalArgumentException: field com.syncano.library.data.AbstractUser.profile has type com.syncano.library.data.Profile, got com.google.gson.internal.LinkedTreeMap
at java.lang.reflect.Field.set(Native Method)
at java.lang.reflect.Field.set(Field.java:557)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.read(ReflectiveTypeAdapterFactory.java:119)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:217)
at com.google.gson.Gson.fromJson(Gson.java:861)
at com.google.gson.Gson.fromJson(Gson.java:826)
at com.google.gson.Gson.fromJson(Gson.java:775)
at com.google.gson.Gson.fromJson(Gson.java:747)
无法使用此功能(或相关文档)修复它或在线找到任何示例。
当您想声明自己的用户配置文件时,您应该创建 2 class:
- 实施
AbstractUser<T>
(其中T
是您的个人资料 class 名称) - 你自己的 class
UserProfile
class with extendProfile
class (fromsyncano package
).
示例代码:
@SyncanoClass(name = "user_profile")
public class MyUserProfile extends Profile {
@SyncanoField(name = "avatar")
public SyncanoFile avatar;
}
public class CustomUser extends AbstractUser<MyUserProfile> {
public CustomUser(String login, String pass) {
super(login, pass);
}
}
即将发布:
从版本 4.0.6(尚未发布)开始,您不再需要配置文件中的 @SyncanoClass 注释(可选)。