public class ShowBPGraphActivity extends AppCompatActivity {
public GraphView graphView;
public LineGraphSeries <DataPoint>lineGraphSeries;
public String systolicbp;
public String diastolicbp;
public String timebp;
public String datebp;
public DatabaseReference db;
public BPFragmentTable bpFragmentTable = new BPFragmentTable( );
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_show_bp_graph );
ButterKnife.bind( this );
db = FirebaseDatabase.getInstance().getReference("bpfragmentTable");
final GraphView graph = (GraphView) findViewById( R.id.graphView );
final List<BPFragmentTable> bpFragmentTableList = new ArrayList<>();
//Get datasnapshot at your "users" root node
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("bpfragmentTable");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<BPFragmentTable> bpfragmentTableList = new ArrayList<>();
for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren()){
BPFragmentTable bpfragmentTable = dataSnapshot1.getValue(BPFragmentTable.class);
systolic = bpfragmentTable.getSystolicbp();
diastolic = bpfragmentTable.getDiastolicbp();
date = bpfragmentTable.getDatebp();
time = bpfragmentTable.getTimebp();
//bpfragmentTable.setSystolicbp(systolic);
//bpfragmentTable.setDiastolicbp(diastolic);
//bpfragmentTable.setDatebp(date);
//bpfragmentTable.setTimebp(time);
bpfragmentTableList.add(bpfragmentTable);
// Toast.makeText(MainActivity.this,""+name,Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
//handle databaseError
}
});
// please help me why i get null value in systolic diastolic date and time
System.out.println( "systolicbp" + systolicbp );
System.out.println( "diastolicbp" + diastolicbp );
System.out.println( "datebp" + datebp );
System.out.println( "timebp" + timebp );
try {
@SuppressLint("SimpleDateFormat") SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a\nMMM dd yyyy");
dateValued = formatter.parse(datebp);
dateInMills = dateValued.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
final long xlong = dateInMills;
final int ysystolicInt = Integer.parseInt( systolicbp );
final int ydiastolicInt = Integer.parseInt( diastolicbp );
这是图片中的错误
我想获取bpfragmentTable
的所有值并将所有值存储在字符串变量中,并使用该变量在图形视图中绘制图形。我想从图片中的表BPFragment表中获取所有值:
这是BPFragmentTable.class的getter和setter的类
public class BPFragmentTable {
public String bpid;
public String systolicbp;
public String diastolicbp;
public String datebp;
public String timebp;
public BPFragmentTable(){}
public BPFragmentTable(String bpid,String systolicbp,String diastolicbp,String datebp,String timebp) {
this.bpid = bpid;
this.systolicbp = systolicbp;
this.diastolicbp = diastolicbp;
this.datebp = datebp;
this.timebp = timebp;
}
public String getBpid() {
return bpid;
}
public void setBpid(String bpid) {
this.bpid = bpid;
}
public String getSystolicbp() {
return systolicbp;
}
public void setSystolicbp(String systolicbp) {
this.systolicbp = systolicbp;
}
public String getDiastolicbp() {
return diastolicbp;
}
public void setDiastolicbp(String diastolicbp) {
this.diastolicbp= diastolicbp;
}
public String getDatebp() {
return datebp;
}
public void setDatebp(String datebp) {
this.datebp= datebp;
}
public String getTimebp() {
return timebp;
}
public void setTimebp(String timebp) {
this.timebp= timebp;
}
}
为什么我会得到空对象引用?
答案 0 :(得分:0)
从Firebase异步加载数据。到您调用formatter.parse(datebp)
时,onDataChange
方法尚未运行,并且尚未设置datebp
。您将需要将数据的解析移至 onDataChange
:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("bpfragmentTable");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<BPFragmentTable> bpfragmentTableList = new ArrayList<>();
for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren()){
BPFragmentTable bpfragmentTable = dataSnapshot1.getValue(BPFragmentTable.class);
systolic = bpfragmentTable.getSystolicbp();
diastolic = bpfragmentTable.getDiastolicbp();
date = bpfragmentTable.getDatebp();
time = bpfragmentTable.getTimebp();
bpfragmentTableList.add(bpfragmentTable);
System.out.println( "systolicbp" + systolicbp );
System.out.println( "diastolicbp" + diastolicbp );
System.out.println( "datebp" + datebp );
System.out.println( "timebp" + timebp );
try {
@SuppressLint("SimpleDateFormat") SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a\nMMM dd yyyy");
dateValued = formatter.parse(datebp);
dateInMills = dateValued.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
对于Firebase刚接触的开发人员来说,这种异步性质是一个常见的陷阱。由于异步API在现代编程中极为常见,因此我强烈建议您快速了解它们。有关一些好的入门资料,请参见:
onDataChange
中获取值)