Приложение вылетает при нажатии на элемент списка: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main, .onItemClick

Этот код отлично работал в eclipse, но теперь я импортировал в студию Android 4.1.1. У меня есть все последние обновления и правильные библиотеки, я пытался аннулировать кеши и перезапускать, очищать, пробовал разные устройства и пробовал разные уровни API. Мое приложение запускается хорошо , но когда я нажимаю на любой элемент списка, происходит сбой. 154-я строка - это сортировка массива.

@SuppressLint("UseValueOf")
public class CribActivity extends Activity
{
private ListView lv1;
private EditText et;
private final String[] lv_arr ={
        "item 1",
        "items amid 1 - 66 here is a lot",
        "Item 66th"
};
private final ArrayList<String> array_sort= new ArrayList<>();
int textlength=0;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    lv1 = findViewById(R.id.listView);
    et = findViewById(R.id.EditText01);

    lv1 = findViewById(R.id.listView);

    lv1.setAdapter(
            new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, lv_arr));
    lv1.setTextFilterEnabled(true);


    et.addTextChangedListener(new TextWatcher()
    {
        public void afterTextChanged(Editable s)
        {
            // Abstract Method of TextWatcher Interface.
        }
        public void beforeTextChanged(CharSequence s,
                                      int start, int count, int after)
        {
            // Abstract Method of TextWatcher Interface.
        }
        public void onTextChanged(CharSequence s,
                                  int start, int before, int count)
        {
            textlength = et.getText().length();
            array_sort.clear();
            for (String value : lv_arr) {
                if (textlength <= value.length()) {
                    if (et.getText().toString().equalsIgnoreCase(
                            (String)
                                    value.subSequence(0,
                                            textlength))) {
                        array_sort.add(value);
                    }
                }
            }
            lv1.setAdapter(new ArrayAdapter<>
                    (CribActivity.this,
                            android.R.layout.simple_list_item_1, array_sort));
        }
    });


    lv1.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String name;
            name = array_sort.get(position);
            for (int i = 0; i < lv_arr.length; i++) {

                if (lv_arr[i]
                        .equalsIgnoreCase(
                                name)) {
                    position = i;

                    break;
                }

            }



            String itemname = Integer.toString(position);

            Intent intent = new Intent();

            intent.setClass(CribActivity.this, ViewActivity.class);

            Bundle b = new Bundle();


            b.putString("defStrID", itemname);

            intent.putExtras(b);


            startActivity(intent);
        }
    });
}

Логкат:

E/FirebaseInstanceId: Token retrieval failed: SERVICE_NOT_AVAILABLE
E/FirebaseInstanceId: Token retrieval failed: INVALID_SENDER

ошибки при запуске:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: ru.tablica.sputnikovyh, PID: 13145
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.get(ArrayList.java:437)
    at ru.tablica.sputnikovyh.CribActivity$2.onItemClick(CribActivity.java:154)
    at android.widget.AdapterView.performItemClick(AdapterView.java:318)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1159)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3136)
    at android.widget.AbsListView.onTouchUp(AbsListView.java:4064)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:3822)
    at android.view.View.dispatchTouchEvent(View.java:12513)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3024)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2705)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
    at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
    at android.app.Activity.dispatchTouchEvent(Activity.java:3400)
    at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
    at android.view.View.dispatchPointerEvent(View.java:12752)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5106)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4909)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4585)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4642)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7092)
    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7061)
    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7022)
    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7195)
    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:326)
    at android.os.Looper.loop(Looper.java:160)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

person Kenzhekul Tashiev    schedule 14.11.2020    source источник
comment
lv_arr не имеет элементов, поэтому не может вернуть значение. Пожалуйста, укажите, как вы инициализируете lv_arr   -  person Zain    schedule 14.11.2020
comment
Вы заполнили эти списки данными?   -  person Zain    schedule 14.11.2020
comment
да его данные внутри массива   -  person Kenzhekul Tashiev    schedule 14.11.2020


Ответы (1)


android spinners имеет проблему, из-за которой onItemClick вызывается непреднамеренно с первым элементом (индекс 0), когда вы запускаете свою активность, которая содержит этот счетчик. Я подозреваю, что это вызывается до загрузки данных в списки, вызывающие это исключение.

Попробуйте проверить, загружены ли списки, прежде чем вы получите данные, как показано ниже.

lv1.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String name;

            if (array_sort.size() <= 0) return; // <<<<<<< change here
            if (lv_arr.length <=0) return; // <<<<<<< change here

            name = array_sort.get(position);
            for (int i = 0; i < lv_arr.length; i++) {

                if (lv_arr[i]
                        .equalsIgnoreCase(
                                name)) {
                    position = i;

                    break;
                }

            }

person Zain    schedule 14.11.2020
comment
Спасибо, Зейн, но теперь они недоступны, но когда я ищу, а затем нажимаю, он открывается, ошибка: E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5 glUtilsParamSize: unknow param 0x000085b5 - person Kenzhekul Tashiev; 14.11.2020
comment
это не похоже на полную трассировку стека, можете ли вы отладить и посмотреть, выходите ли вы за рамки двух условий, которые я поставил в счетчике? - person Zain; 14.11.2020
comment
E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1 E/cr_VariationsUtils: Failed read seed file /data/user/0/ru.tablica.sputnikovyh/app_webview/variations_seed: /data/user/0/ru .tableca.sputnikovyh/app_webview/variations_seed (Нет такого файла или каталога) - person Kenzhekul Tashiev; 14.11.2020
comment
No such file or directory.. вы пытаетесь получить чтение/запись в файле каталога в вашем приложении - person Zain; 14.11.2020
comment
это звучит как проблема, не связанная с счетчиком - person Zain; 14.11.2020
comment
в любом случае вы исправили как минимум половину проблемы, теперь я могу открыть хотя бы поиском, спасибо Зейн! - person Kenzhekul Tashiev; 14.11.2020