这是我的Android代码,用于从Firebase实时数据库中检索数据:
package com.example.firebaseapp;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import`enter code here` android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class MainActivity extends AppCompatActivity {
Button f;
TextView status;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("light");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
f=(Button)findViewById(R.id.button);
status=(TextView) findViewById(R.id.lightstatus);
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
status.setText(value);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError){
status.setText("Could not fetch data..");
}
});
}
public void lighton(View view){
myRef.setValue(1);
}
public void lightoff(View view){
myRef.setValue(0);
}
}
应用程序正在正确编译,但是每当我运行该应用程序时,该应用程序就会崩溃,并显示错误消息“不幸的是,Firebase应用程序已停止”。请帮我解决这个问题。 这是我数据库中的片段:
答案 0 :(得分:1)
将String更改为Integer或Long,因为light值不是String。
public class MainActivity extends AppCompatActivity {
Button f;
TextView status;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
f = (Button)findViewById(R.id.button);
status = (TextView) findViewById(R.id.lightstatus);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("light");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Integer value = dataSnapshot.getValue(Integer.class);
status.setText(String.valueOf(value));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError){
status.setText("Could not fetch data..");
}
});
}
public void lighton(View view){
myRef.setValue(1);
}
public void lightoff(View view){
myRef.setValue(0);
}
}