单击列表项时应用程序崩溃:FATAL EXCEPTION: main, .onItemClick
Posted
技术标签:
【中文标题】单击列表项时应用程序崩溃:FATAL EXCEPTION: main, .onItemClick【英文标题】:App crashes when clicking on list item: 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<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);
是它在数组中的数据
【参考方案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!以上是关于单击列表项时应用程序崩溃:FATAL EXCEPTION: main, .onItemClick的主要内容,如果未能解决你的问题,请参考以下文章
点击 Android/Java 列表视图项时,如何禁用单击声音?