Java 如何从数组列表中正确检索第一个操作的数据
数组列表中有5项。如果用户单击项目1,程序将显示项目1;如果用户单击项目2,程序将显示项目2,依此类推。问题是,除非没有从程序中检索到数据,否则用户第一次操作时必须单击按钮两次。我不知道为什么。我不知道是哪一部分导致了这个问题。如果你能指出问题的原因,我真希望你能帮忙 这是我的密码Java 如何从数组列表中正确检索第一个操作的数据,java,android,database,firebase,android-studio,Java,Android,Database,Firebase,Android Studio,数组列表中有5项。如果用户单击项目1,程序将显示项目1;如果用户单击项目2,程序将显示项目2,依此类推。问题是,除非没有从程序中检索到数据,否则用户第一次操作时必须单击按钮两次。我不知道为什么。我不知道是哪一部分导致了这个问题。如果你能指出问题的原因,我真希望你能帮忙 这是我的密码 //start here to retrieve fav books DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().c
//start here to retrieve fav books
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Users")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("Wishlist");
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
List<String> wishlist_item = new ArrayList<String>();
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
wishlist_item.add(postSnapshot.getValue().toString());
}
//list 1
L1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(wishlist_item.size()>=1){
Intent launchWish = new Intent(wish_list.this, wishlist_webview.class);
String a = wishlist_item.get(0);
launchWish.putExtra("k",a);
startActivity(launchWish);
//animation
overridePendingTransition(R.anim.slide_up_in,R.anim.slide_up_out);
}else{
Toast.makeText(wish_list.this, "Favourite 1 is empty", Toast.LENGTH_SHORT).show();
}
}
});
//list 2
L2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(wishlist_item.size()>=2){
Intent launchWish = new Intent(wish_list.this, wishlist_webview.class);
String b = wishlist_item.get(1);
launchWish.putExtra("k",b);
startActivity(launchWish);
//animation
overridePendingTransition(R.anim.slide_up_in,R.anim.slide_up_out);
}else{
Toast.makeText(wish_list.this, "Favourite 2 is empty", Toast.LENGTH_SHORT).show();
}
}
});
//list 3
L3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(wishlist_item.size()>=3){
Intent launchWish = new Intent(wish_list.this, wishlist_webview.class);
String c = wishlist_item.get(2);
launchWish.putExtra("k",c);
startActivity(launchWish);
//animation
overridePendingTransition(R.anim.slide_up_in,R.anim.slide_up_out);
}else{
Toast.makeText(wish_list.this, "Favourite 3 is empty", Toast.LENGTH_SHORT).show();
}
}
});
//list 4
L4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(wishlist_item.size()>=4){
Intent launchWish = new Intent(wish_list.this, wishlist_webview.class);
String d = wishlist_item.get(3);
launchWish.putExtra("k",d);
startActivity(launchWish);
//animation
overridePendingTransition(R.anim.slide_up_in,R.anim.slide_up_out);
}else{
Toast.makeText(wish_list.this, "Favourite 4 is empty", Toast.LENGTH_SHORT).show();
}
}
});
//list 5
L5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(wishlist_item.size()>=5){
Intent launchWish = new Intent(wish_list.this, wishlist_webview.class);
String e = wishlist_item.get(4);
launchWish.putExtra("k",e);
startActivity(launchWish);
//animation
overridePendingTransition(R.anim.slide_up_in,R.anim.slide_up_out);
}else{
Toast.makeText(wish_list.this, "Favourite 5 is empty", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
//从这里开始检索fav书籍
DatabaseReference myRef=FirebaseDatabase.getInstance().getReference().child(“用户”)
.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child(“愿望列表”);
myRef.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
List wishlist_item=new ArrayList();
对于(DataSnapshot postSnapshot:snapshot.getChildren()){
wishlist_item.add(postSnapshot.getValue().toString());
}
//清单1
L1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(愿望列表_item.size()>=1){
Intent launchWish=newintent(wish_list.this,wishlist_webview.class);
字符串a=愿望列表\u项.get(0);
launchWish.putExtra(“k”,a);
startActivity(launchWish);
//动画
覆盖转换(R.anim.向上滑入,R.anim.向上滑出);
}否则{
Toast.makeText(wish_list.this,“收藏夹1为空”,Toast.LENGTH_SHORT.show();
}
}
});
//清单2
L2.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(愿望列表_item.size()>=2){
Intent launchWish=newintent(wish_list.this,wishlist_webview.class);
字符串b=愿望列表_item.get(1);
launchWish.putExtra(“k”,b);
startActivity(launchWish);
//动画
覆盖转换(R.anim.向上滑入,R.anim.向上滑出);
}否则{
Toast.makeText(wish_list.this,“收藏夹2为空”,Toast.LENGTH_SHORT.show();
}
}
});
//清单3
L3.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(愿望列表_item.size()>=3){
Intent launchWish=newintent(wish_list.this,wishlist_webview.class);
字符串c=愿望列表\u item.get(2);
launchWish.putExtra(“k”,c);
startActivity(launchWish);
//动画
覆盖转换(R.anim.向上滑入,R.anim.向上滑出);
}否则{
Toast.makeText(wish_list.this,“收藏夹3为空”,Toast.LENGTH_SHORT.show();
}
}
});
//清单4
L4.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(愿望列表_item.size()>=4){
Intent launchWish=newintent(wish_list.this,wishlist_webview.class);
字符串d=愿望列表项.get(3);
launchWish.putExtra(“k”,d);
startActivity(launchWish);
//动画
覆盖转换(R.anim.向上滑入,R.anim.向上滑出);
}否则{
Toast.makeText(wish_list.this,“收藏夹4为空”,Toast.LENGTH_SHORT.show();
}
}
});
//清单5
L5.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(愿望列表_item.size()>=5){
Intent launchWish=newintent(wish_list.this,wishlist_webview.class);
字符串e=愿望列表_item.get(4);
launchWish.putExtra(“k”,e);
startActivity(launchWish);
//动画
覆盖转换(R.anim.向上滑入,R.anim.向上滑出);
}否则{
Toast.makeText(wish_list.this,“收藏夹5为空”,Toast.LENGTH_SHORT.show();
}
}
});
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
我猜默认情况下,L1..L5
范围内的所有按钮都是可见的,FirebaseDatabase
调用是异步的,这意味着它从远程获取数据,IO需要时间,因此需要一些时间才能得到响应,我的最佳选择是显示某种加载状态,首先隐藏按钮,然后在设置单击监听器按钮时,使其可见,我想默认情况下,L1..L5
范围内的所有按钮都是可见的,而FirebaseDatabase
调用是异步的,这意味着它正在从远程获取数据,IO需要时间,因此获取响应需要一些时间,我的最佳选择是显示某种类型的加载
状态,首先隐藏按钮,然后在设置单击侦听器
按钮时使其可见
我想您需要将按钮的onClickListeners
设置在onDataChange
方法之外,因为每当数据发生更改时,都会触发数据更改。您还需要制作列表愿望列表项目