我有一个方法
public String getUsername(String uid){
uid= auth.getCurrentUser().getUid();
DatabaseReference uidRef = mFirebaseuser.child(uid);
uidRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("TAG", ""+dataSnapshot);
String username=dataSnapshot.child("username").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("what"+databaseError);
}
});
return username;
}
我希望getUsername返回在内部类中初始化的字符串username
,但我无法访问它,我也无法修改onDataChange
,因为它已被覆盖。如果我在内部类之前初始化getUsername方法中的用户名,我必须将其设置为最终,然后才能在onDataChange
中设置其值,请帮助我解决这个问题。
答案 0 :(得分:3)
一种方法,在没有测试的情况下,将username
声明为您班级中的私有变量,如下所示:
private String username = null;
然后在课堂上使用它另一个地方
if (username != null){
//TODO what ever with username
}
在你的内部类中删除String
并使你的方法为无效
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("TAG", ""+dataSnapshot);
username = dataSnapshot.child("username").getValue(String.class);
}
答案 1 :(得分:0)
使用变量用户名作为全局变量,并在annonymouse类中给出值并将其返回
答案 2 :(得分:0)
一个解决方法是创建一个元素数组并返回它的值。它有点难看,但它有效!
public String getUsername(String uid){
uid= auth.getCurrentUser().getUid();
final String[] username = new String[1]; // final makes it accessible inside the inner class
DatabaseReference uidRef = mFirebaseuser.child(uid);
uidRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("TAG", ""+dataSnapshot);
username[0]=dataSnapshot.child("username").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("what"+databaseError);
}
});
return username[0];
}