2017-04-18 85 views
-1

無法獲取其提供的數據「嘗試調用虛擬方法」java.lang.String java.lang.String.toString()「。無法找到任何解決方案,請幫助。在Android中從Firebase獲取數據

守則是

public class AdminUser extends AppCompatActivity { 
    private TextView tv1,tv2; 
    private DatabaseReference mDatabase; 
    private FirebaseAuth auth; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_admin_user); 

     auth = FirebaseAuth.getInstance(); 
     String username=FirebaseAuth.getInstance().getCurrentUser().getUid(); 
     mDatabase= FirebaseDatabase.getInstance().getReference().child(username); 
     tv1=(TextView)findViewById(R.id.textView6); 
     tv2=(TextView)findViewById(R.id.textView8); 


     mDatabase.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
      // String name=dataSnapshot.getValue().toString(); 
       String name=dataSnapshot.child("name").getValue(String.class).toString() ; 
       String address=dataSnapshot.child("address").getValue(String.class).toString(); 
       tv1.setText(name); 
       tv2.setText(address); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 
} 

回答

0

這2條線:

String name=dataSnapshot.child("name").getValue(String.class).toString() ; 
String address=dataSnapshot.child("address").getValue(String.class).toString(); 

是造成你的問題,請向火力地堡文檔和閱讀有關如何從實時數據庫這裏

讀取數據

https://firebase.google.com/docs/database/android/read-and-write

編輯 爲了給你具體的一個例子,你的問題,你首先需要創建一個代表你的數據庫,你擁有的數據,例如普通Java對象(PO​​JO)類。

public class User { 
private String name; 
private String address; 

public User() { 
    //Empty constructor required by firebase 
    // serialize the data retrieved and convert 
    // it to an object of this class 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 
} 

然後在你的valueEventListener,你可以做這樣的事情

 mDatabase.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      //Serialize your retrieved data to a User object 
      User user = dataSnapshot.getValue(User.class); 
      //Now you have an object of the User class and can use its getters like this 
      tv1.setText(user.getName()); 
      tv2.setText(user.getAddress()); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

希望這有助於

+0

如果我在地方的getValue的使用信息getKey這裏的關鍵是成功地打印,但在那個鍵值在獲取getValue後不存在。 –

+0

這是因爲您錯誤地應用了getValue方法,請參閱文檔。 – wnieves19

+0

主席先生,我無法理解該文件。如果您提供了一些幫助,這對我來說是非常好用的。 –