java - 在数组中获取选中的复选框数据
问题描述
我有一个 android 应用程序,在其中显示带有一些复选框的表单。我想根据选中的复选框查询 firestore。我无法获得选中复选框的数组/数组列表。出于测试目的,我添加了一个 textview 。如果我的测试有效,我想使用新填充的数组/数组列表的成员设置 textview 的文本。
当我选中任何复选框并单击按钮时,我的应用程序崩溃了。假设我选中了 box4。条件 (item4.isChecked) 应该为真,因此 item4 必须添加到我的数组列表中,其大小现在不等于零
if(item4.isChecked()){
testingArrayList.add("item4");
}
为什么我收到数组长度为零的错误?
这是我的代码:
package com.example.XX;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FieldPath;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
import java.util.List;
public class todayQuestionFragment extends Fragment {
FirebaseFirestore db = FirebaseFirestore.getInstance();
CheckBox item1;
CheckBox item2;
CheckBox item3;
CheckBox item4;
CheckBox item5;
CheckBox item6;
CheckBox item7;
CheckBox item8;
CheckBox item9;
CheckBox item10;
Button button;
ProgressBar progressBar;
TextView textView;//just for testing
public todayQuestionFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_today_question, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
item1=view.findViewById(R.id.checkBox_item1);
item2=view.findViewById(R.id.checkBox_item2);
item3=view.findViewById(R.id.checkBox_item3);
item4=view.findViewById(R.id.checkBox_item4);
item5=view.findViewById(R.id.checkBox_item5);
item6=view.findViewById(R.id.checkBox_item6);
item7=view.findViewById(R.id.checkBox_item7);
item8=view.findViewById(R.id.checkBox_item8);
item9=view.findViewById(R.id.checkBox_item9);
item10=view.findViewById(R.id.checkBox_item10);
textView=view.findViewById(R.id.testingCheckBox);
Button button=view.findViewById(R.id.toMainQueryButton);
final NavController navController= Navigation.findNavController(view);
final ArrayList<String> testingArrayList = new ArrayList<String>();
if(item1.isChecked()){
testingArrayList.add("item1");
}
if(item2.isChecked()){
testingArrayList.add("item2");
}if(item3.isChecked()){
testingArrayList.add("item3");
}if(item4.isChecked()){
testingArrayList.add("item4");
}
if(item5.isChecked()){
testingArrayList.add("item5");
}
if(item6.isChecked()){
testingArrayList.add("item6");
}
if(item7.isChecked()){
testingArrayList.add("item7");
}if(item8.isChecked()){
testingArrayList.add("item8");
}if(item9.isChecked()){
testingArrayList.add("item9");
}
if(item10.isChecked()){
testingArrayList.add("item10");
}
final String[] testArray = new String[testingArrayList.size()];
for(int j =0;j<testingArrayList.size();j++){
testArray[j] = testingArrayList.get(j);
}
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(testArray[0]);
}
});
}
}
日志猫:
2020-06-12 14:48:10.772 4622-4622/com.example.XX E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.XX, PID: 4622
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.example.XX.todayQuestionFragment$1.onClick(todayQuestionFragment.java:140)
at android.view.View.performClick(View.java:7201)
at android.view.View.performClickInternal(View.java:7170)
at android.view.View.access$3500(View.java:806)
at android.view.View$PerformClick.run(View.java:27582)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
解决方案
发现我的错误。我所有带有 if 条件和 arraylist/array 的逻辑都需要添加到我的按钮的 onClickListener 中
推荐阅读
- powershell - 下载文件,获取状态,然后执行文件
- discord - Discord API:使用 Oauth2 公会范围查看公会频道信息
- appium - 是否可以集成 MITMProxy 和 Appium?
- graph - 可视化预测数据和实际数据的最佳方法是什么?
- c++ - 为什么要明确选择左值引用重载而不是左值的转发引用重载?
- sql - 选择拉取基于国外和国内的邮政编码
- go - 当切片长度超过 700 项时,golang 函数返回空切片
- kubernetes - 如何在 kubernetes 上通过 tcp 终止 ssl
- postgresql - 用jdbctemplate获取一系列日期之间的ip个数
- keyboard-shortcuts - 如何在 Mac 上使用 SHIFT 箭头键、_not_ CTRL 箭头键切换 iTerm2 中的选项卡