2

This code was working fine in eclipse, but now i imported to android studio 4.1.1.I have all latest updates and correct libraries, tried to invalidate caches and restart, clean, tried different deveices and tried different API levels.My app starts well, but when i click on any list item it crashes.154th line is array sort.

@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);
        }
    });
}

logcat:

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

errors in run:

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)
  • `lv_arr` has no items so it can't return a value.. please provide how you initialize `lv_arr` – Zain Nov 14 '20 at 07:37
  • `private final String[] lv_arr ={...list items}; private final ArrayList array_sort= new ArrayList<>(); int textlength=0;` – Kenzhekul Tashiev Nov 14 '20 at 07:41
  • Have you populated these lists with data? – Zain Nov 14 '20 at 07:43
  • `@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);` – Kenzhekul Tashiev Nov 14 '20 at 07:44
  • yes its data inside the array – Kenzhekul Tashiev Nov 14 '20 at 07:44

1 Answers1

1

android spinners has an issue that onItemClick gets called unintentionally with the first item (index of 0) when you launch your activity that holds this spinner. I suspect that this gets called before the data is loaded into lists causing this exception.

Try to check if lists are loaded before you get data as below

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;
                }

            }

Zain
  • 37,492
  • 7
  • 60
  • 84
  • Thank you Zain, but now they are unclickable, but when i search then click, it opens, error is: E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5 glUtilsParamSize: unknow param 0x000085b5 – Kenzhekul Tashiev Nov 14 '20 at 08:03
  • this doesn't seem to be a full stack-trace, can you debug and see if you go beyond the two conditions I put in the spinner? – Zain Nov 14 '20 at 08:05
  • E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1 E/cr_VariationsUtils: Failed reading seed file "/data/user/0/ru.tablica.sputnikovyh/app_webview/variations_seed": /data/user/0/ru.tablica.sputnikovyh/app_webview/variations_seed (No such file or directory) – Kenzhekul Tashiev Nov 14 '20 at 08:08
  • `No such file or directory`.. do you try to get read/write in a directory file in your app – Zain Nov 14 '20 at 08:15
  • this sounds like an issue not related to the spinner – Zain Nov 14 '20 at 08:25
  • 1
    anyway you fixed at least half of problem, now i can open at least by search, thank you Zain! – Kenzhekul Tashiev Nov 14 '20 at 08:27