Java Android要求我声明一个final值,该值是我希望在函数onclicklistner中多次使用的值
(已经检查了另一个问题,这个问题与firebase有关) 您好,所以我尝试在onClicklistner中重复使用ref,但是android studio要求我声明一个值为final,因此它只从firebase中检索一个项。。这是我的代码,将显示更多细节Java Android要求我声明一个final值,该值是我希望在函数onclicklistner中多次使用的值,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,(已经检查了另一个问题,这个问题与firebase有关) 您好,所以我尝试在onClicklistner中重复使用ref,但是android studio要求我声明一个值为final,因此它只从firebase中检索一个项。。这是我的代码,将显示更多细节 DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Bathrooms"); myRef.addVa
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Bathrooms");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
for ( DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
final Bathrooms bathrooms = dataSnapshot1.getValue(Bathrooms.class); // this is where I am asked and forced to create a final.
if( bathrooms.getAvailability().equals("Yes")) {
bathroomsArrayList.add(bathrooms);
}
Browse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(bathroomsArrayList!=null) {
if (bathrooms.getFloor().equals(Floor.getSelectedItem()) &&bathrooms.getSection().equals(Section.getSelectedItem())) {
disable.setChecked(true);
Toast.makeText(getActivity(), "Browse done successfully", Toast.LENGTH_SHORT).show();
}
else {
disable.setChecked(false);
Toast.makeText(getActivity(), "No bathrooms", Toast.LENGTH_SHORT).show();
}
}
else {
disable.setChecked(false);
Toast.makeText(getActivity(), "array empty", Toast.LENGTH_SHORT).show();
}
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getActivity(), "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
}
});
return rootview;
}
伙计。
我在这种情况下使用的第一种也是最简单的方法是在onCreate()之前定义变量,
然后你可以在你想要的任何地方使用它。
我觉得这对你有帮助…伙计。
我在这种情况下使用的第一种也是最简单的方法是在onCreate()之前定义变量,
然后你可以在你想要的任何地方使用它。
我想这对你有帮助…我无法想象为什么AndroidStudio会强迫你在这里期末考试。也许吧。 无论如何,因为变量是在for循环中定义的,所以每次迭代都会新创建它,所以它可以是最终的——也就是说,它在创建时直接初始化,并且从不分配新值
TL;DR:如果您的代码没有按预期工作,那么变量就不是final。我无法想象为什么AndroidStudio会强迫您在这里使用final。也许吧。 无论如何,因为变量是在for循环中定义的,所以每次迭代都会新创建它,所以它可以是最终的——也就是说,它在创建时直接初始化,并且从不分配新值
TL;DR:如果您的代码未按预期运行,则变量不是最终变量。谢谢您的回复,我看不出代码无法运行的任何其他原因,因为我希望数组包含所有值,同时它只带来一个值(最后添加到firebase中的值)您应该调试代码并查看dataSnapshot.getChildren()返回的子项数。并调试for循环以查看发生了什么。感谢您的回复,我看不出代码不起作用的任何其他原因,因为我希望数组包含所有值,同时它只带来一个值(最后添加到firebase中的值)。您应该调试代码并查看有多少子dataSnapshot.getChildren()返回。并调试for循环以查看发生了什么。感谢您的回复,我不能这样做,因为我需要数据库引用中的快照,所以它非常有用inside@OmarBinAli你到底想在这里做什么?Android ask for final如果你在点击监听器中使用var,并且var在创建之前没有声明,我认为ref可以是final,没有任何问题,因为你根本不能更改ref的值,final意味着一旦设置了它的值,你就不能为这个var设置另一个值,嗨,谢谢你的回复,我想检查整个firebase的某个值“availability=yes”,然后打开togglebutton,结果我只从firebase检索了一个值(最后添加的值),而不是所有值。感谢您的回复,我不能这样做,因为我需要数据库引用中的快照,所以最inside@OmarBinAli你到底想在这里做什么?Android ask for final如果你在点击监听器中使用var,并且var在创建之前没有声明,我认为ref可以是final,没有任何问题,因为你根本不能更改ref的值,final意味着一旦设置了它的值,你就不能为这个var设置另一个值,嗨,谢谢你的回复,我想检查整个firebase的某个值“availability=yes”,然后转动togglebutton,结果我只从firebase中检索一个值(最后添加的值),而不是所有值。作为
final
有什么问题?作为final
有什么问题?