ArrayIndexOutOfBoundsException 但数组不为空
ArrayIndexOutOfBoundsException but Array is not empty
我收到以下错误消息 java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at com.sbeyer.daainv.EditDataFragment.onCreateView(EditDataFragment.java:110)
我知道这个错误表明我的数组只包含 [0] 值。但是我片段中的 Log.d 消息给了我这个日志:
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/dataLength: 9
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[0]: 65
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[1]: Drucker
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[2]: WSN-0020
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[3]: 651615231
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[4]: 65:65:65:65:65:65
11-27 09:50:18.384 21696-21696/com.sbeyer.daainv D/[5]: 013665161523
11-27 09:50:18.384 21696-21696/com.sbeyer.daainv D/[6]: 20.01.2015
11-27 09:50:18.384 21696-21696/com.sbeyer.daainv D/[7]: 1
11-27 09:50:18.384 21696-21696/com.sbeyer.daainv D/[8]: 1
您看到我的数组不为空...此外,将值设置为 EditTexts 等所有其他操作都工作正常。但是,如果我单击 fabmain
,则会发生错误(在我的 DBHelper
Class 中调用的每个方法也都工作正常。更改已保存,但我的应用程序崩溃了。有人可以帮助我吗?
这是我的 EditDataFragment
public class EditDataFragment extends Fragment {
DbHelper mydb;
[...]
private String currentLeid;
private String currentProduct;
boolean firstFocus;
//Validator booleans
boolean labelOk;
boolean serialOk = true;
boolean macOk;
boolean daaIdOk;
boolean billOk;
boolean locationOk;
boolean roomOk;
boolean checkFirst;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_edit_data, container, false);
getActivity().setTitle(getString(R.string.Add_Element_ActionBar));
setRetainInstance(true);
final Context context = getContext();
mydb = new DbHelper(context);
firstFocus = false;
checkFirst = true;
Drawable drawableForFabDone = getResources().getDrawable(R.drawable.ic_done);
((MainActivity) getActivity()).fabmain.setImageDrawable(drawableForFabDone);
inputLabel = (EditText) view.findViewById(R.id.editText_label);
inputSerial = (EditText) view.findViewById(R.id.editText_serial);
inputMac = (EditText) view.findViewById(R.id.editText_mac);
inputDaaId = (EditText) view.findViewById(R.id.editText_daa_id);
inputBill = (EditText) view.findViewById(R.id.editText_date);
inputLocation = (EditText) view.findViewById(R.id.editText_location);
inputRoom = (EditText) view.findViewById(R.id.editText_room);
checkFabMain(inputLabel);
Spinner products = (Spinner) view.findViewById(R.id.spinner_products);
SimpleImageArrayAdapter adapter = new SimpleImageArrayAdapter(context,
new Integer[]{R.drawable.icon_pc_circle_128, R.drawable.icon_laptop_circle_128, R.drawable.icon_printer_circle_128, R.drawable.icon_other});
products.setAdapter(adapter);
//Fill EditTexts if "Edit" is clicked in ListViewFragment///////////////////////////////////////////////////////////
if ((((MainActivity) getActivity()).leidToEdit) != "") ;
{
String Leid = (((MainActivity) getActivity()).leidToEdit);
String dataToEdit = mydb.getElementsById(Leid);
String[] dataToEditArray = dataToEdit.split("\t");
checkFirst = false;
currentLeid = dataToEditArray[0];
Log.d("dataLength", Integer.toString(dataToEditArray.length));
Log.d("[0]", dataToEditArray[0]);
Log.d("[1]", dataToEditArray[1]); <<<<<<<<<<<<<<<<<<<<<<<<LINE110
Log.d("[2]", dataToEditArray[2]);
Log.d("[3]", dataToEditArray[3]);
Log.d("[4]", dataToEditArray[4]);
Log.d("[5]", dataToEditArray[5]);
Log.d("[6]", dataToEditArray[6]);
Log.d("[7]", dataToEditArray[7]);
Log.d("[8]", dataToEditArray[8]);
currentProduct = dataToEditArray[1];
checkSpinner(dataToEditArray, products);
inputLabel.setText(dataToEditArray[2]);
labelOk = true;
inputSerial.setText(dataToEditArray[3]);
serialOk = true;
inputMac.setText(dataToEditArray[4]);
macOk = true;
inputDaaId.setText(dataToEditArray[5]);
daaIdOk = true;
inputBill.setText(dataToEditArray[6]);
billOk = true;
String LidFromArray = dataToEditArray[7];
inputLocation.setText(mydb.getLocationById(LidFromArray));
if (inputLocation.getText().toString().length() == 4) {
locationOk = true;
}
String RidFromArray = dataToEditArray[8];
inputRoom.setText(mydb.getRoomById(RidFromArray));
if (inputRoom.getText().toString().length() == 3) {
roomOk = true;
}
checkFabMain(inputLabel);
}
}
//Initialize the input methods//////////////////////////////////////////////////////////////////////////////////////
[...]
((MainActivity) getActivity()).fabmain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = getContext();
String product = inputProduct;
String label = inputLabel.getText().toString();
String serial = inputSerial.getText().toString();
String mac = inputMac.getText().toString();
String daaid = inputDaaId.getText().toString();
String bill = inputBill.getText().toString();
String location = inputLocation.getText().toString();
String room = inputRoom.getText().toString();
mydb.deleteByLeid(currentLeid);
mydb.setData(product, label, serial, mac, daaid, bill);
currentLeid = "";
Toast toast = Toast.makeText(context, "Datensatz bearbeitet", Toast.LENGTH_SHORT);
toast.show();
((MainActivity) getActivity()).setLeidToEditZero();
loadSavedRoomsFragment();
}
});
((MainActivity) getActivity()).fabdelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
inputLabel.setText("");
inputSerial.setText("");
inputMac.setText("");
inputDaaId.setText("");
inputBill.setText("");
firstFocus = true;
((MainActivity) getActivity()).fabdelete.animate().translationY(375);
}
});
return view;
onCreateView
方法似乎运行了两次。但我不知道为什么。
logcat:
11-27 10:37:27.193 24915-24915/com.sbeyer.daainv E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sbeyer.daainv, PID: 24915
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.sbeyer.daainv.EditDataFragment.onCreateView(EditDataFragment.java:109)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:517)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
如果我加载数组,一切正常(请参阅上面的 Log.d 条目)dataLength: 9
在我单击我的按钮后,我从该位置获得另一个 Log.d 条目 dataLength: 1
为什么我的 Fragment "rebuild" 本身?
错误显示 length=1; index=1
。这意味着,您的数组不为空,只有一项,但您尝试获取第二项。数组以 0 索引开始,而不是 1。这就是问题所在。
问题已解决。加载另一个片段时片段管理器出现问题。
我收到以下错误消息 java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at com.sbeyer.daainv.EditDataFragment.onCreateView(EditDataFragment.java:110)
我知道这个错误表明我的数组只包含 [0] 值。但是我片段中的 Log.d 消息给了我这个日志:
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/dataLength: 9
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[0]: 65
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[1]: Drucker
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[2]: WSN-0020
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[3]: 651615231
11-27 09:50:18.383 21696-21696/com.sbeyer.daainv D/[4]: 65:65:65:65:65:65
11-27 09:50:18.384 21696-21696/com.sbeyer.daainv D/[5]: 013665161523
11-27 09:50:18.384 21696-21696/com.sbeyer.daainv D/[6]: 20.01.2015
11-27 09:50:18.384 21696-21696/com.sbeyer.daainv D/[7]: 1
11-27 09:50:18.384 21696-21696/com.sbeyer.daainv D/[8]: 1
您看到我的数组不为空...此外,将值设置为 EditTexts 等所有其他操作都工作正常。但是,如果我单击 fabmain
,则会发生错误(在我的 DBHelper
Class 中调用的每个方法也都工作正常。更改已保存,但我的应用程序崩溃了。有人可以帮助我吗?
这是我的 EditDataFragment
public class EditDataFragment extends Fragment {
DbHelper mydb;
[...]
private String currentLeid;
private String currentProduct;
boolean firstFocus;
//Validator booleans
boolean labelOk;
boolean serialOk = true;
boolean macOk;
boolean daaIdOk;
boolean billOk;
boolean locationOk;
boolean roomOk;
boolean checkFirst;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_edit_data, container, false);
getActivity().setTitle(getString(R.string.Add_Element_ActionBar));
setRetainInstance(true);
final Context context = getContext();
mydb = new DbHelper(context);
firstFocus = false;
checkFirst = true;
Drawable drawableForFabDone = getResources().getDrawable(R.drawable.ic_done);
((MainActivity) getActivity()).fabmain.setImageDrawable(drawableForFabDone);
inputLabel = (EditText) view.findViewById(R.id.editText_label);
inputSerial = (EditText) view.findViewById(R.id.editText_serial);
inputMac = (EditText) view.findViewById(R.id.editText_mac);
inputDaaId = (EditText) view.findViewById(R.id.editText_daa_id);
inputBill = (EditText) view.findViewById(R.id.editText_date);
inputLocation = (EditText) view.findViewById(R.id.editText_location);
inputRoom = (EditText) view.findViewById(R.id.editText_room);
checkFabMain(inputLabel);
Spinner products = (Spinner) view.findViewById(R.id.spinner_products);
SimpleImageArrayAdapter adapter = new SimpleImageArrayAdapter(context,
new Integer[]{R.drawable.icon_pc_circle_128, R.drawable.icon_laptop_circle_128, R.drawable.icon_printer_circle_128, R.drawable.icon_other});
products.setAdapter(adapter);
//Fill EditTexts if "Edit" is clicked in ListViewFragment///////////////////////////////////////////////////////////
if ((((MainActivity) getActivity()).leidToEdit) != "") ;
{
String Leid = (((MainActivity) getActivity()).leidToEdit);
String dataToEdit = mydb.getElementsById(Leid);
String[] dataToEditArray = dataToEdit.split("\t");
checkFirst = false;
currentLeid = dataToEditArray[0];
Log.d("dataLength", Integer.toString(dataToEditArray.length));
Log.d("[0]", dataToEditArray[0]);
Log.d("[1]", dataToEditArray[1]); <<<<<<<<<<<<<<<<<<<<<<<<LINE110
Log.d("[2]", dataToEditArray[2]);
Log.d("[3]", dataToEditArray[3]);
Log.d("[4]", dataToEditArray[4]);
Log.d("[5]", dataToEditArray[5]);
Log.d("[6]", dataToEditArray[6]);
Log.d("[7]", dataToEditArray[7]);
Log.d("[8]", dataToEditArray[8]);
currentProduct = dataToEditArray[1];
checkSpinner(dataToEditArray, products);
inputLabel.setText(dataToEditArray[2]);
labelOk = true;
inputSerial.setText(dataToEditArray[3]);
serialOk = true;
inputMac.setText(dataToEditArray[4]);
macOk = true;
inputDaaId.setText(dataToEditArray[5]);
daaIdOk = true;
inputBill.setText(dataToEditArray[6]);
billOk = true;
String LidFromArray = dataToEditArray[7];
inputLocation.setText(mydb.getLocationById(LidFromArray));
if (inputLocation.getText().toString().length() == 4) {
locationOk = true;
}
String RidFromArray = dataToEditArray[8];
inputRoom.setText(mydb.getRoomById(RidFromArray));
if (inputRoom.getText().toString().length() == 3) {
roomOk = true;
}
checkFabMain(inputLabel);
}
}
//Initialize the input methods//////////////////////////////////////////////////////////////////////////////////////
[...]
((MainActivity) getActivity()).fabmain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = getContext();
String product = inputProduct;
String label = inputLabel.getText().toString();
String serial = inputSerial.getText().toString();
String mac = inputMac.getText().toString();
String daaid = inputDaaId.getText().toString();
String bill = inputBill.getText().toString();
String location = inputLocation.getText().toString();
String room = inputRoom.getText().toString();
mydb.deleteByLeid(currentLeid);
mydb.setData(product, label, serial, mac, daaid, bill);
currentLeid = "";
Toast toast = Toast.makeText(context, "Datensatz bearbeitet", Toast.LENGTH_SHORT);
toast.show();
((MainActivity) getActivity()).setLeidToEditZero();
loadSavedRoomsFragment();
}
});
((MainActivity) getActivity()).fabdelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
inputLabel.setText("");
inputSerial.setText("");
inputMac.setText("");
inputDaaId.setText("");
inputBill.setText("");
firstFocus = true;
((MainActivity) getActivity()).fabdelete.animate().translationY(375);
}
});
return view;
onCreateView
方法似乎运行了两次。但我不知道为什么。
logcat:
11-27 10:37:27.193 24915-24915/com.sbeyer.daainv E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sbeyer.daainv, PID: 24915
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.sbeyer.daainv.EditDataFragment.onCreateView(EditDataFragment.java:109)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:517)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
如果我加载数组,一切正常(请参阅上面的 Log.d 条目)dataLength: 9
在我单击我的按钮后,我从该位置获得另一个 Log.d 条目 dataLength: 1
为什么我的 Fragment "rebuild" 本身?
错误显示 length=1; index=1
。这意味着,您的数组不为空,只有一项,但您尝试获取第二项。数组以 0 索引开始,而不是 1。这就是问题所在。
问题已解决。加载另一个片段时片段管理器出现问题。