私は、Javaクラスのグローバル整数としてfirebase値を格納するにはどうすればよいです

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);
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=14362&siteId=1
おすすめ