Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Spinner上的IndexOutOfBoundException_Java_Android_Indexoutofboundsexception - Fatal编程技术网

Java Android Spinner上的IndexOutOfBoundException

Java Android Spinner上的IndexOutOfBoundException,java,android,indexoutofboundsexception,Java,Android,Indexoutofboundsexception,我正在制作一个将单位转换成不同单位的应用程序。我正在尝试让应用程序在以下步骤中工作 使用微调器选择类别(温度、长度等) 根据要选择的类别,其他两个微调器将显示属于每个类别的单位 这是到目前为止的代码 public class UnitConverterFragment extends Fragment implements AdapterView.OnItemSelectedListener { private EditText etValue; private Spinner

我正在制作一个将单位转换成不同单位的应用程序。我正在尝试让应用程序在以下步骤中工作

  • 使用微调器选择类别(温度、长度等)
  • 根据要选择的类别,其他两个微调器将显示属于每个类别的单位
  • 这是到目前为止的代码

    public class UnitConverterFragment extends Fragment implements AdapterView.OnItemSelectedListener {
        private EditText etValue;
        private Spinner spCategory, spFrom, spTo;
        private UnitConverter currentConverter, lastConverter;
        private ArrayAdapter<String> categoryArrayAdapter;
        private ArrayAdapter<CharSequence> unitArrayAdapter;
        private String unitFrom, unitTo;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_unitconverter, container, false);
            spCategory = (Spinner) view.findViewById(R.id.spCategory);
            spFrom = (Spinner) view.findViewById(R.id.spFrom);
            spTo = (Spinner) view.findViewById(R.id.spTo);
            etValue = (EditText) view.findViewById(R.id.etValue);
    
            spCategory.setOnItemSelectedListener(this);
            spFrom.setOnItemSelectedListener(this);
            spTo.setOnItemSelectedListener(this);
    
            categoryArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.category));
            categoryArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spCategory.setAdapter(categoryArrayAdapter);
            categoryArrayAdapter.setNotifyOnChange(true);
    
            unitArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_item);
            unitArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spFrom.setAdapter(unitArrayAdapter);
            spTo.setAdapter(unitArrayAdapter);
    
            unitArrayAdapter.setNotifyOnChange(true);
    
            currentConverter = new TemperatureConverter();
            lastConverter = currentConverter;
    
            return view;
        }
    
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    
            if(view.getParent() == spCategory) {
                switch(position) {
                    case 0:
                        setConverter(new TemperatureConverter());
                        break;
                    case 1:
                        setConverter(new LengthConverter());
                        break;
                    case 2:
                        setConverter(new MassConverter());
                        break;
                    case 3:
                        setConverter(new SpeedConverter());
                        break;
                    case 4:
                        setConverter(new VolumeConverter());
                        break;
                    case 5:
                        setConverter(new AreaConverter());
                        break;
                    case 6:
                        setConverter(new FuelConsumptionConverter());
                        break;
                    case 7:
                        setConverter(new TimeConverter());
                        break;
                    case 8:
                        setConverter(new DigitalStorageConverter());
                        break;
                }
    
                fillFromToSpinner(position);
    
                spFrom.setSelection(0);
                spTo.setSelection(0);
    
                **unitFrom = spFrom.getItemAtPosition(0).toString();
                unitTo = spTo.getItemAtPosition(0).toString();**
    
            } else if(view.getParent() == spFrom) {
                unitFrom = spFrom.getSelectedItem().toString();
            } else if(view.getParent() == spTo) {
                unitTo = spTo.getSelectedItem().toString();
            }
        }
    
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
    
        }
    
        private void setConverter(UnitConverter converter) {
            lastConverter = currentConverter;
            currentConverter = converter;
    
            lastConverter = null;
        }
    
        private void fillFromToSpinner(int position) {
            switch(position) {
                case 0:
                    fillSpinnerWithTemperatureUnits();
                    break;
                case 1:
                    fillSpinnerWithLengthUnits();
                    break;
                case 2:
                    fillSpinnerWithMassUnits();
                    break;
                case 3:
                    fillSpinnerWithSpeedUnits();
                    break;
                case 4:
                    fillSpinnerWithVolumeUnits();
                    break;
                case 5:
                    fillSpinnerWithAreaUnits();
                    break;
                case 6:
                    fillSpinnerWithFuelConsumptionUnits();
                    break;
                case 7:
                    fillSpinnerWithTimeUnits();
                    break;
                case 8:
                    fillSpinnerWithDigitalStorageUnits();
                    break;
            }
        }
    
        private void fillSpinnerWithTemperatureUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.temperature, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
        }
    
        private void fillSpinnerWithLengthUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.length, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
        }
    
        private void fillSpinnerWithMassUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.mass, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
    
        }
    
        private void fillSpinnerWithSpeedUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.speed, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
        }
    
        private void fillSpinnerWithVolumeUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.volume, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
        }
    
        private void fillSpinnerWithAreaUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.area, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
        }
    
        private void fillSpinnerWithFuelConsumptionUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.fuel_consumption, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
        }
    
        private void fillSpinnerWithTimeUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.time, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
        }
    
        private void fillSpinnerWithDigitalStorageUnits() {
            unitArrayAdapter.clear();
            unitArrayAdapter.createFromResource(getView().getContext(), R.array.digital_storage, android.R.layout.simple_spinner_item);
            unitArrayAdapter.notifyDataSetChanged();
        }
    }
    

    如果您有任何关于解决此问题的建议,我们将不胜感激。

    在您的unitArrayAdapter中更新了如果您没有传递任何数组字符串,则将其更改为空

    private static final String[] items={"lorem", "ipsum", "dolor","sit", "amet","consectetuer", };
    
    unitArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_item, items);
    
    private static final String[]items={“lorem”、“ipsum”、“dolor”、“sit”、“amet”、“concertetuer”,};
    unitArrayAdapter=新的ArrayAdapter(view.getContext(),android.R.layout.simple\u微调器\u项,项);
    
    根据其他人的建议,unitArrayAdapter为空。 那么您希望传递给什么值呢?
    如果比较两个适配器,您将看到categoryArrayAdapter中填充了字符串[],而unitArrayAdapter为null

    这不起作用,因为代码中的ArrayAdapter变量需要字符串,而getStringArray()方法需要CharSequence。然后为它创建一个单独的字符串数组,就像这个新的ArrayAdapter(view.getContext(),android.R.layout.simple_spinner_item,新字符串[]{“item1”,“item2”,“item3”,“item4”});
    private static final String[] items={"lorem", "ipsum", "dolor","sit", "amet","consectetuer", };
    
    unitArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_item, items);