gpt4 book ai didi

java - Android Spinner 上的 IndexOutOfBoundException

转载 作者:行者123 更新时间:2023-12-02 04:28:07 25 4
gpt4 key购买 nike

我正在制作一个将单位转换为不同单位的应用程序。我正在尝试使该应用程序在以下步骤中运行。

  1. 选择带有旋转器的类别(温度、长度等)
  2. 根据选择的类别,其他两个旋转器将显示属于每个类别的单位。

这是到目前为止的代码。

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();
}
}

运行应用程序时,它突然死机,并在突出显示的部分显示 IndexOutOfBoundException。

仅供引用,这是日志。

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337)
at android.widget.AdapterView.getItemAtPosition(AdapterView.java:831)
at com.marshall.calculator.ui.UnitConverterFragment.onItemSelected(UnitConverterFragment.java:102)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:964)
at android.widget.AdapterView.access$200(AdapterView.java:49)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:928)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)

任何解决此问题的建议都将非常感激。

最佳答案

已更新在你的unitArrayAdapter中你没有传递任何数组字符串它是 null ,将其更改为此

private static final String[] items={"lorem", "ipsum", "dolor","sit", "amet","consectetuer", };

unitArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_item, items);

关于java - Android Spinner 上的 IndexOutOfBoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31882739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com