hanzn98:
私は今、しばらくの間、この問題にこだわってきたと私はそれを解決するように見えることはできません。私はグローバル変数に「のgetValue」を使って、自分のデータベースから値を格納しようとしています。私は外の円グラフ(Anychart)を作るために、この変数を使用したいです。
ここで私はデータをプルするために使用しているコードがあります。
db1 = FirebaseDatabase.getInstance().getReference().child("Stats").child(currentuser).child("Match").child(team).child("side 1").child("Score");
db1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Integer total = dataSnapshot.getValue(Integer.class);
total_to = total;
私はそうのように私のコードの先頭にOnCreateの方法の変数外を持っています
int total_to;
ここに示したように、私はその後、その情報のうち、チャートを作りたいです
Pie pie = AnyChart.pie();
List<DataEntry> data = new ArrayList<>();
data.add(new ValueDataEntry("y", total_to) );
data.add(new ValueDataEntry("x", 7) );
pie.data(data);
AnyChartView anyChartView = (AnyChartView)findViewById(R.id.piechart);
anyChartView.setChart(pie);
問題は、コードがグローバル変数にdatasnapshot値を格納していないようですので、total_to値は常にゼロであるということです。すべてのヘルプは高く評価されるだろう。私は、Javaに新たなんだ注意してください(私に簡単に行きます;))
ピーター・ハダッド:
onDataChange
後にコードを意味する非同期でonDataChange
データが完全に取得される前に実行されます。したがって、total_to
外部のonDataChange
ゼロとなります。あなたはこの問題を解決するために、次のことを行う必要があります。
if (dataSnapshot.exists()) {
Integer total = dataSnapshot.getValue(Integer.class);
total_to = total;
Pie pie = AnyChart.pie();
List<DataEntry> data = new ArrayList<>();
data.add(new ValueDataEntry("y", total_to) );
data.add(new ValueDataEntry("x", 7) );
pie.data(data);
AnyChartView anyChartView = (AnyChartView)findViewById(R.id.piechart);
anyChartView.setChart(pie);
}