java - 在函数中重新赋值后全局变量值赋值保持不变(Android Studio)
问题描述
程序员,我对android studio和java很陌生,在这种情况下,我正在尝试上传检索到的用户信息并将它们存储在firebase数据库中。检索过程成功,登录后可以看到检索URL。但是,String pathToProfile
没有分配URL,当我检查日志时,它是空的。提前致谢!
全局声明:
String pathToProfile;
Map<String, Object> UserInfo = new HashMap<>();
检索下载 URL 的函数
// retrieved URL should be saved in user document
private void retrieveProfileViaURL () {
profileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
pathToProfile = uri.toString();
UserInfo.put(PROFILE_URL, pathToProfile);
Log.d(TAG, "retrieve profile image successful" + pathToProfile);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.d(TAG, "retrieve profile image failure");
// pathToProfile = "uri download unsuccessful";
}
});
}
将用户信息上传到firebase的功能
private void uploadUserInfo(String user, String bioInfo) {
// CollectionReference users = db.collection("users");
String UID = getUserID();
retrieveProfileViaURL();
// UserInfo.put(USERID, UID);
UserInfo.put(USERNAME, user);
UserInfo.put(BIO, bioInfo);
mDocRef.collection("users").document(UID).set(UserInfo)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(USER_INFO, "Document has been saved");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(USER_INFO, "Document was not saved!", e);
}
});
}
解决方案
Firebase 数据库中的所有数据都是异步读取的。您无法在调用之外获取值。这就是为什么你的pathToProfile
节目为空。
为了更好的方法,您可以尝试这样的方法。
用户上传数据后,它会自动允许用户使用 url 写入数据
private void retrieveProfileViaURL () {
profileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
pathToProfile = uri.toString();
String UID = getUserID();
UserInfo.put(USERNAME, user);
UserInfo.put(BIO, bioInfo);
UserInfo.put(PROFILE_URL, pathToProfile);
mDocRef.collection("users").document(UID).set(UserInfo)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(USER_INFO, "Document has been saved");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(USER_INFO, "Document was not saved!", e);
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.d(TAG, "retrieve profile image failure");
// pathToProfile = "uri download unsuccessful";
}
});
}
推荐阅读
- xamarin.forms - 如何在 xamarin 表单 wpf 应用程序中添加应用程序图标徽章
- ag-grid - 在ag-grid中隐藏按钮单击的列?
- sql-server - 将 SSRS 报告导出为 CSV 格式时出现问题
- javascript - 如果键与数组值匹配,如何获取值
- javascript - 反馈加载 iframe 有时效果不佳
- c - 这个函数做了什么来帮助它以不同的方式接受输入以及 for 循环中的条件是如何执行的
- python - 删除 Beautiful Soup 中的标签
- javascript - Firstore 数据不起作用
- javascript - 对象标签的数据属性是否有错误事件?
- ruby-on-rails - 使用自定义时间安排任务