【问题标题】:App crashes when clicking on list item: FATAL EXCEPTION: main, .onItemClick单击列表项时应用程序崩溃:FATAL EXCEPTION: main, .onItemClick
【发布时间】:2021-02-26 02:28:57
【问题描述】:

这段代码在 Eclipse 中运行良好,但现在我导入到 android studio 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)

【问题讨论】:

  • lv_arr 没有项目,因此无法返回值。请提供您如何初始化lv_arr
  • private final String[] lv_arr ={...list items}; private final ArrayList&lt;String&gt; array_sort= new ArrayList&lt;&gt;(); 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&lt;&gt;(this, android.R.layout.simple_list_item_1, lv_arr)); lv1.setTextFilterEnabled(true);
  • 是它在数组中的数据

标签: android android-studio arraylist crash onitemclick


【解决方案1】:

android spinners 有一个问题,当您启动包含此微调器的活动时,onItemClick 会在第一项(索引为 0)中获得 called unintentionally。我怀疑这是在将数据加载到导致此异常的列表之前调用的。

在获取如下数据之前尝试检查列表是否已加载

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,但现在它们无法点击,但是当我搜索然后点击时,它会打开,错误是:E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5 glUtilsParamSize: unknow param 0x000085b5
  • 这似乎不是一个完整的堆栈跟踪,您可以调试一下,看看您是否超出了我在微调器中放置的两个条件?
  • E/eglCodecCommon:GoldfishAddressSpaceHostMemoryAllocator:ioctl_ping 设备类型=5 失败,ret=-1 E/cr_VariationsUtils:读取种子文件失败“/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.. 你是否尝试在你的应用程序的目录文件中读取/写入
  • 无论如何你解决了至少一半的问题,现在我至少可以通过搜索打开了,谢谢 Zain!
猜你喜欢
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2017-09-27
  • 2020-12-02
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多