第一次提出问题,请原谅我的任何疏忽......
我正在成功将用户登录到Quickblox聊天服务(用户进行身份验证并无问题地登录)但是当我尝试检索当前用户的标签时,我总是在logcat中获取null。但是,我在预期的logcat中获得用户的登录信息。
我正在通过QuickBlox管理页面添加标签,它们在那里可见。
这是我的方法,任何帮助将不胜感激:
public static void GetUserTags(QBUser user) {
StringifyArrayList<String> tags = user.getTags();
Log.i("User Login", user.getLogin());
Log.i("User Tags", "" + tags.getItemsAsStringOrNull());
}
我正在使用Android Studio 2.1.1,根据Quickblox文档,我首先创建一个新的QBUser对象,传递用户名和密码参数(如下所示)。我将此对象存储为名为“user”的公共静态QBUser:
public static QBUser user;
[...]
user = new QBUser(username, password);
然后我创建一个新会话,传递上面创建的用户对象:
QBAuth.createSession(user, new QBEntityCallback<QBSession>() {
@Override
public void onSuccess(QBSession session, Bundle params) {
GetUserTags();
}
@Override
public void onError(QBResponseException errors) {
}
}
我还扩展了GetUserTags()方法以查看我实际获得了多少信息:
public static String GetUserTags() {
StringifyArrayList<String> tags = user.getTags();
Log.i("User", "Login: " + user.getLogin());
Log.i("User", "Password: " + user.getPassword());
Log.i("User", "Email: " + user.getEmail());
Log.i("User", "FullName: " + user.getFullName());
Log.i("User", "Id: " + String.valueOf(user.getId()));
Log.i("User", "Tags: " + String.valueOf(tags));
Log.i("User", "Tags: " + user.getTags().getItemsAsStringOrNull());
return user.getLogin();
}
我只返回用户名和密码的值......
在我的回复的这一点上,我意识到我只是在检索我已经提供过的价值......我很高兴!
回到绘图板......
答案 0 :(得分:1)
所以,我在这里解决了这个问题。我没有尝试在成功创建会话后从QBUser用户获取所有值,而是添加了一个GetUser方法:
private static void GetUser(int userID) {
QBUsers.getUser(userID, new QBEntityCallback<QBUser>() {
@Override
public void onSuccess(QBUser qbUser, Bundle bundle) {
user = qbUser;
GetUserTags();
}
@Override
public void onError(QBResponseException e) {
}
});
}
这将我的公共静态QBUser对象设置为服务器的对象。
然后我在QBAuth.createSession()的onSuccess回调中调用该方法,如下所示:
QBAuth.createSession(user, new QBEntityCallback<QBSession>() {
@Override
public void onSuccess(QBSession session, Bundle params) {
GetUser(session.getUserId());
}
@Override
public void onError(QBResponseException errors) {
}
}
这是一个明显的错误,但我忽略了一个错误。