Reputation: 63
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)
Upvotes: 2
Views: 320
Reputation: 40810
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;
}
}
Upvotes: 1