RM_ HTMLKoodaaja
RM_ HTMLKoodaaja

Reputation: 1

Why my App crashes? After adding one spinner more, dialog won't open

When I run this void, activity restarts, instead it will need to open dialog.

void:

AlertDialog.Builder mBuilder = new AlertDialog.Builder(Settings.this);
                        View mView = getLayoutInflater().inflate(R.layout.dialog_wedit, null);
                        mBuilder.setView(mView);
                        mBuilder.setTitle("Wilma custom URL");
                        mBuilder.setIcon(R.drawable.ic_wilma);
                        final Spinner mSpinner = mView.findViewById(R.id.editor_netprotocol); //Using mView because it doesn't exist in the main layout, but only in the custom layout (same under this line)
                        final Spinner mSpinner_mode = mView.findViewById(R.id.spinner_mode);
                        final EditText mEdittext = mView.findViewById(R.id.editor_url);
                        final String[] selects = new String[]{"https://", "http://"
                        };
                        final String[] selects2 = new String[]{"Default URL", "Custom URL"
                        };
                        ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
                                android.R.layout.simple_spinner_item, selects);
                        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(context,
                                android.R.layout.simple_spinner_item, selects2);
                        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        mSpinner.setAdapter(adapter);
                        mSpinner_mode.setAdapter(adapter2);
                        final Boolean[] url_mode = {false};
                        SharedPreferences prefs = getSharedPreferences(getString(R.string.preference_file_key), MODE_PRIVATE);
                        Boolean url_mode_saved = prefs.getBoolean("wilmacustom", false);
                        if (url_mode_saved) {
                            mSpinner_mode.setSelection(2);
                            url_mode[0] = true;
                        } else {
                            mSpinner_mode.setSelection(1);
                            url_mode[0] = false;
                        }

                        final String[] url_protocol_selection = new String[1];


                        mSpinner_mode.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                            @Override
                            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                                switch (position) {
                                    case 1:
                                        url_mode[0] = false;
                                        break;
                                    case 2:
                                        url_mode[0] = true;
                                        break;
                                }
                            }

                            @Override
                            public void onNothingSelected(AdapterView<?> parent) {

                            }
                        });
                        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                            @Override
                            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                                url_protocol_selection[0] = mSpinner.getSelectedItem().toString();

                            }

                            @Override
                            public void onNothingSelected(AdapterView<?> parent) {

                            }
                        });
                        mBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        });
                        mBuilder.setPositiveButton("Apply", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                String finalURL = url_protocol_selection[0] + mEdittext.getText().toString();
                                SharedPreferences.Editor editor = getSharedPreferences(getString(R.string.preference_file_key), MODE_PRIVATE).edit();
                                editor.putString("wilmaurl", finalURL);
                                editor.putBoolean("wilmacustom", url_mode[0]);
                                editor.apply();
                                dialog.dismiss();
                            }
                        });
                        mBuilder.show();

dialog layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="20dp">

    <Spinner
        android:id="@+id/spinner_mode"
        android:layout_width="348dp"
        android:layout_height="40dp" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/layout_editor">

        <Spinner
            android:id="@+id/editor_netprotocol"
            android:layout_width="143dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textUri"
            android:hint="wilma.kunta.fi"
            android:id="@+id/editor_url"
            android:layout_weight="1" />

    </LinearLayout>

</LinearLayout>

Logs:

07-25 21:21:12.513 6403-6403/com.developerfromjokela.edison E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.developerfromjokela.edison, PID: 6403
    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
        at java.util.Arrays$ArrayList.get(Arrays.java:3769)
        at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:385)
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:441)
        at android.widget.ArrayAdapter.getView(ArrayAdapter.java:407)
        at android.widget.Spinner.makeView(Spinner.java:712)
        at android.widget.Spinner.layout(Spinner.java:660)
        at android.widget.Spinner.onLayout(Spinner.java:622)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.support.v7.widget.AlertDialogLayout.setChildFrame(AlertDialogLayout.java:347)
        at android.support.v7.widget.AlertDialogLayout.onLayout(AlertDialogLayout.java:340)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:761)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2511)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2227)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1407)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6783)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:924)
        at android.view.Choreographer.doCallbacks(Choreographer.java:736)
        at android.view.Choreographer.doFrame(Choreographer.java:671)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:910)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6499)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
07-25 21:21:12.513 6403-6403/com.developerfromjokela.edison E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.developerfromjokela.edison, PID: 6403
    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
        at java.util.Arrays$ArrayList.get(Arrays.java:3769)
        at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:385)
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:441)
        at android.widget.ArrayAdapter.getView(ArrayAdapter.java:407)
        at android.widget.Spinner.makeView(Spinner.java:712)
        at android.widget.Spinner.layout(Spinner.java:660)
        at android.widget.Spinner.onLayout(Spinner.java:622)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.support.v7.widget.AlertDialogLayout.setChildFrame(AlertDialogLayout.java:347)
        at android.support.v7.widget.AlertDialogLayout.onLayout(AlertDialogLayout.java:340)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:761)
        at android.view.View.layout(View.java:19659)
        at android.view.ViewGroup.layout(ViewGroup.java:6075)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2511)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2227)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1407)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6783)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:924)
        at android.view.Choreographer.doCallbacks(Choreographer.java:736)
        at android.view.Choreographer.doFrame(Choreographer.java:671)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:910)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6499)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

The app will display dialog with 2 Spinners and one edit text. With one spinner, dialog was working fine, and when I added second one, dialog won't open.

I can't get it why it crashes. If someone can help me, big thanks to him.

Upvotes: 0

Views: 41

Answers (1)

TEK292
TEK292

Reputation: 261

Take a look at this part of your stacktrace:

07-25 21:21:12.513 6403-6403/com.developerfromjokela.edison E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.developerfromjokela.edison, PID: 6403
    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2

This means your application is crashing because you are trying to select an element in one of your Spinner's that does not exist. Remember, all of the items listed in your spinner are indexed at 0.

mSpinner_mode.setSelection(1); // Selects the 2nd item
mSpinner_mode.setSelection(2); // Selects the 3rd item, which doesn't exist, causing the crash

Upvotes: 1

Related Questions