Firebaseデータベースから特定の値を取得しようとしていますが、これまでに行っていましたが、少し違うことをしようとしています。 void型のメソッドから "を返します。voidの結果型を持つメソッドから値を返すことができません
私は新しいJavaプログラマーなので、いくつかのプログラミングルールが欠けていると思います。
これは私のコードです:
public int getVotesForEvent(final String event_title) {
firebaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("Votes").exists()) {
for (DataSnapshot event : dataSnapshot.child("Votes").getChildren()) {
String event_title2 = event.getKey();
if (event_title2.equals(event_title)) {
int count=Integer.parseInt(event.getValue().toString());
return count;
}
}
}
else {
int count = 0 ;
return count;
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
私は数を返すようにしようとしているところ、エラーが表示されます。コメントを読んだ後
が、これは私のコードであり、現在の方法は、宣言された変数のカウントには影響しません、それは0を保持します:
int count=0;
public int getVotesForEvent(final String event_title) {
firebaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("Votes").exists()) {
boolean flag=false;
for (DataSnapshot event : dataSnapshot.child("Votes").getChildren()) {
String event_title2 = event.getKey();
if (event_title2.equals(event_title)) {
flag=true;
Toast.makeText(EventInfo.this, ""+Integer.parseInt(event.child("event_votes").getValue().toString()), Toast.LENGTH_SHORT).show();
count=Integer.parseInt(event.child("event_votes").getValue().toString());
}
}
if(flag!=true)
{
count=0;
}
}
else
{
count=0;
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
return count;
}
私は今、間違って何をしているのですか?
戻り値voidを持つ関数の中に何も返すことはできませんが、より大きな問題は、非同期メソッドを同期メソッドに変換しようとしていて、そのように動作しないことです。 – Alex
http://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase-listener –
を参照して、クラス変数として 'count'を宣言するか、変数をfinalとして宣言します(ここで問題を解決することはできません)または内部クラスを別のクラスに移動します。 最も簡単なのは、変数をクラス変数にすることです。 –