DatabaseException: can't convert object of java.Lang.String to type
I'm trying to retrieve data from my Firebase Realtime Database but encountering this issue.
I'm suspecting I got this error due to my path in DatabaseReference. I tried different paths but none seemed to work.
Here's my database (The generated texts are userID)
My class that stores the data structure
public class ERDataStructure {
private String temperature;
private String humidity;
public ERDataStructure() {
}
public ERDataStructure(String temperature, String humidity) {
this.temperature = temperature;
this.humidity = humidity;
}
public String getTemperature(){
return temperature;
}
public void setTemperature(String temperature){
this.temperature = temperature;
}
public String getHumidity() {
return humidity;
}
public void setHumidity(String humidity) {
this.humidity = humidity;
}
}
My ReadingScreen.java (MainActivity)
import ...
public class ReadingScreen extends AppCompatActivity {
//Firebase Initialization
FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
private FirebaseDatabase mFirebaseDatabase;
private static final String TAG = "ReadingScreen";
ERDataStructure mData;
private TextView textViewTemperatureNumber, textViewHumidityNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reading_screen);
//Find Views
textViewHumidityNumber = (TextView) findViewById(R.id.humidity_number);
textViewTemperatureNumber = (TextView) findViewById(R.id.temperature_number);
// Initiate Firebase
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String userID = user.getUid();
// Non-working Reference, but code works
//myRef = mFirebaseDatabase.getReference();
//myRef = mFirebaseDatabase.getReference().child(userID);
//Crashing Reference
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
//myRef = mFirebaseDatabase.getReference("ERDataStructure");
//
retrieveData();
}
public void gotoMainMenu (View view)
{
Intent intent = new Intent(ReadingScreen.this, MainMenu.class);
startActivity(intent);
}
private void retrieveData(){
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
textViewTemperatureNumber.setText("" +ds.getTemperature());
textViewHumidityNumber.setText(""+ds.getHumidity());
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
textViewTemperatureNumber.setText("" +ds.getTemperature());
textViewHumidityNumber.setText(""+ds.getHumidity());
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<ERDataStructure> arraylist = new ArrayList<ERDataStructure>();
if (dataSnapshot != null && dataSnapshot.getValue() != null){
//FirebaseUser user = mAuth.getCurrentUser();
//String userID = user.getUid();
for (DataSnapshot a : dataSnapshot.getChildren()){
ERDataStructure dataStructure = new ERDataStructure();
dataStructure.setTemperature(a.getValue(ERDataStructure.class).getTemperature());
dataStructure.setHumidity(a.getValue(ERDataStructure.class).getHumidity());
arraylist.add(dataStructure);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
The error was recorded in
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
Edit: After adding another level to my database, it manages to run
java android firebase firebase-realtime-database
add a comment |
I'm trying to retrieve data from my Firebase Realtime Database but encountering this issue.
I'm suspecting I got this error due to my path in DatabaseReference. I tried different paths but none seemed to work.
Here's my database (The generated texts are userID)
My class that stores the data structure
public class ERDataStructure {
private String temperature;
private String humidity;
public ERDataStructure() {
}
public ERDataStructure(String temperature, String humidity) {
this.temperature = temperature;
this.humidity = humidity;
}
public String getTemperature(){
return temperature;
}
public void setTemperature(String temperature){
this.temperature = temperature;
}
public String getHumidity() {
return humidity;
}
public void setHumidity(String humidity) {
this.humidity = humidity;
}
}
My ReadingScreen.java (MainActivity)
import ...
public class ReadingScreen extends AppCompatActivity {
//Firebase Initialization
FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
private FirebaseDatabase mFirebaseDatabase;
private static final String TAG = "ReadingScreen";
ERDataStructure mData;
private TextView textViewTemperatureNumber, textViewHumidityNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reading_screen);
//Find Views
textViewHumidityNumber = (TextView) findViewById(R.id.humidity_number);
textViewTemperatureNumber = (TextView) findViewById(R.id.temperature_number);
// Initiate Firebase
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String userID = user.getUid();
// Non-working Reference, but code works
//myRef = mFirebaseDatabase.getReference();
//myRef = mFirebaseDatabase.getReference().child(userID);
//Crashing Reference
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
//myRef = mFirebaseDatabase.getReference("ERDataStructure");
//
retrieveData();
}
public void gotoMainMenu (View view)
{
Intent intent = new Intent(ReadingScreen.this, MainMenu.class);
startActivity(intent);
}
private void retrieveData(){
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
textViewTemperatureNumber.setText("" +ds.getTemperature());
textViewHumidityNumber.setText(""+ds.getHumidity());
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
textViewTemperatureNumber.setText("" +ds.getTemperature());
textViewHumidityNumber.setText(""+ds.getHumidity());
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<ERDataStructure> arraylist = new ArrayList<ERDataStructure>();
if (dataSnapshot != null && dataSnapshot.getValue() != null){
//FirebaseUser user = mAuth.getCurrentUser();
//String userID = user.getUid();
for (DataSnapshot a : dataSnapshot.getChildren()){
ERDataStructure dataStructure = new ERDataStructure();
dataStructure.setTemperature(a.getValue(ERDataStructure.class).getTemperature());
dataStructure.setHumidity(a.getValue(ERDataStructure.class).getHumidity());
arraylist.add(dataStructure);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
The error was recorded in
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
Edit: After adding another level to my database, it manages to run
java android firebase firebase-realtime-database
add a comment |
I'm trying to retrieve data from my Firebase Realtime Database but encountering this issue.
I'm suspecting I got this error due to my path in DatabaseReference. I tried different paths but none seemed to work.
Here's my database (The generated texts are userID)
My class that stores the data structure
public class ERDataStructure {
private String temperature;
private String humidity;
public ERDataStructure() {
}
public ERDataStructure(String temperature, String humidity) {
this.temperature = temperature;
this.humidity = humidity;
}
public String getTemperature(){
return temperature;
}
public void setTemperature(String temperature){
this.temperature = temperature;
}
public String getHumidity() {
return humidity;
}
public void setHumidity(String humidity) {
this.humidity = humidity;
}
}
My ReadingScreen.java (MainActivity)
import ...
public class ReadingScreen extends AppCompatActivity {
//Firebase Initialization
FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
private FirebaseDatabase mFirebaseDatabase;
private static final String TAG = "ReadingScreen";
ERDataStructure mData;
private TextView textViewTemperatureNumber, textViewHumidityNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reading_screen);
//Find Views
textViewHumidityNumber = (TextView) findViewById(R.id.humidity_number);
textViewTemperatureNumber = (TextView) findViewById(R.id.temperature_number);
// Initiate Firebase
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String userID = user.getUid();
// Non-working Reference, but code works
//myRef = mFirebaseDatabase.getReference();
//myRef = mFirebaseDatabase.getReference().child(userID);
//Crashing Reference
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
//myRef = mFirebaseDatabase.getReference("ERDataStructure");
//
retrieveData();
}
public void gotoMainMenu (View view)
{
Intent intent = new Intent(ReadingScreen.this, MainMenu.class);
startActivity(intent);
}
private void retrieveData(){
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
textViewTemperatureNumber.setText("" +ds.getTemperature());
textViewHumidityNumber.setText(""+ds.getHumidity());
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
textViewTemperatureNumber.setText("" +ds.getTemperature());
textViewHumidityNumber.setText(""+ds.getHumidity());
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<ERDataStructure> arraylist = new ArrayList<ERDataStructure>();
if (dataSnapshot != null && dataSnapshot.getValue() != null){
//FirebaseUser user = mAuth.getCurrentUser();
//String userID = user.getUid();
for (DataSnapshot a : dataSnapshot.getChildren()){
ERDataStructure dataStructure = new ERDataStructure();
dataStructure.setTemperature(a.getValue(ERDataStructure.class).getTemperature());
dataStructure.setHumidity(a.getValue(ERDataStructure.class).getHumidity());
arraylist.add(dataStructure);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
The error was recorded in
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
Edit: After adding another level to my database, it manages to run
java android firebase firebase-realtime-database
I'm trying to retrieve data from my Firebase Realtime Database but encountering this issue.
I'm suspecting I got this error due to my path in DatabaseReference. I tried different paths but none seemed to work.
Here's my database (The generated texts are userID)
My class that stores the data structure
public class ERDataStructure {
private String temperature;
private String humidity;
public ERDataStructure() {
}
public ERDataStructure(String temperature, String humidity) {
this.temperature = temperature;
this.humidity = humidity;
}
public String getTemperature(){
return temperature;
}
public void setTemperature(String temperature){
this.temperature = temperature;
}
public String getHumidity() {
return humidity;
}
public void setHumidity(String humidity) {
this.humidity = humidity;
}
}
My ReadingScreen.java (MainActivity)
import ...
public class ReadingScreen extends AppCompatActivity {
//Firebase Initialization
FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
private FirebaseDatabase mFirebaseDatabase;
private static final String TAG = "ReadingScreen";
ERDataStructure mData;
private TextView textViewTemperatureNumber, textViewHumidityNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reading_screen);
//Find Views
textViewHumidityNumber = (TextView) findViewById(R.id.humidity_number);
textViewTemperatureNumber = (TextView) findViewById(R.id.temperature_number);
// Initiate Firebase
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String userID = user.getUid();
// Non-working Reference, but code works
//myRef = mFirebaseDatabase.getReference();
//myRef = mFirebaseDatabase.getReference().child(userID);
//Crashing Reference
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
//myRef = mFirebaseDatabase.getReference("ERDataStructure");
//
retrieveData();
}
public void gotoMainMenu (View view)
{
Intent intent = new Intent(ReadingScreen.this, MainMenu.class);
startActivity(intent);
}
private void retrieveData(){
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
textViewTemperatureNumber.setText("" +ds.getTemperature());
textViewHumidityNumber.setText(""+ds.getHumidity());
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
textViewTemperatureNumber.setText("" +ds.getTemperature());
textViewHumidityNumber.setText(""+ds.getHumidity());
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<ERDataStructure> arraylist = new ArrayList<ERDataStructure>();
if (dataSnapshot != null && dataSnapshot.getValue() != null){
//FirebaseUser user = mAuth.getCurrentUser();
//String userID = user.getUid();
for (DataSnapshot a : dataSnapshot.getChildren()){
ERDataStructure dataStructure = new ERDataStructure();
dataStructure.setTemperature(a.getValue(ERDataStructure.class).getTemperature());
dataStructure.setHumidity(a.getValue(ERDataStructure.class).getHumidity());
arraylist.add(dataStructure);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
The error was recorded in
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
Edit: After adding another level to my database, it manages to run
java android firebase firebase-realtime-database
java android firebase firebase-realtime-database
edited Nov 23 at 17:36
asked Nov 22 at 18:04
Duc Nguyen
327
327
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You need to use ValueEventListener
instead of ChildEventListener
, so change it to this:
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
In this case you use ValueEventListener
, because when you use childEventListener
you are basically looping inside this snapshot and returning the value of humidity
as type String
. It is like looping over dataSnapshot.getChildren()
in the valueventlistener
.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436235%2fdatabaseexception-cant-convert-object-of-java-lang-string-to-type%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You need to use ValueEventListener
instead of ChildEventListener
, so change it to this:
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
In this case you use ValueEventListener
, because when you use childEventListener
you are basically looping inside this snapshot and returning the value of humidity
as type String
. It is like looping over dataSnapshot.getChildren()
in the valueventlistener
.
add a comment |
You need to use ValueEventListener
instead of ChildEventListener
, so change it to this:
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
In this case you use ValueEventListener
, because when you use childEventListener
you are basically looping inside this snapshot and returning the value of humidity
as type String
. It is like looping over dataSnapshot.getChildren()
in the valueventlistener
.
add a comment |
You need to use ValueEventListener
instead of ChildEventListener
, so change it to this:
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
In this case you use ValueEventListener
, because when you use childEventListener
you are basically looping inside this snapshot and returning the value of humidity
as type String
. It is like looping over dataSnapshot.getChildren()
in the valueventlistener
.
You need to use ValueEventListener
instead of ChildEventListener
, so change it to this:
myRef = mFirebaseDatabase.getReference().child(userID).child("ERDataStructure");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ERDataStructure ds = dataSnapshot.getValue(ERDataStructure.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
In this case you use ValueEventListener
, because when you use childEventListener
you are basically looping inside this snapshot and returning the value of humidity
as type String
. It is like looping over dataSnapshot.getChildren()
in the valueventlistener
.
answered Nov 22 at 18:16
Peter Haddad
20.3k84056
20.3k84056
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436235%2fdatabaseexception-cant-convert-object-of-java-lang-string-to-type%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown