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,则会发生错误(在我的 DBHelperClass 中调用的每个方法也都工作正常。更改已保存,但我的应用程序崩溃了。有人可以帮助我吗?

这是我的 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。这就是问题所在。

问题已解决。加载另一个片段时片段管理器出现问题。