Reputation: 1
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
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