微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修复 java.lang.ArrayIndexOutOfBoundsException: length=0;指数=-1

如何解决如何修复 java.lang.ArrayIndexOutOfBoundsException: length=0;指数=-1

我需要帮助。因此,我一直在修补 android studio,每次我使用 onTextChanged 在文本字段中输入内容时,我的应用程序都会崩溃,它会在 logcat java.lang.Arrayindexoutofboundsexception: length=0; 中打印此错误。指数=-1。我如何解决它?提前致谢。

这是我的 NotesFragment.java

package com.example.reminderapp;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

import static android.R.layout.simple_list_item_1;

public class NotesFragment extends Fragment {
    View view;
    static ArrayList<String> notes = new ArrayList<>();
    static ArrayAdapter<String> arrayAdapter;
    FloatingActionButton fabfrNotes;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
        if(notes.size()==0)
        {
            view = inflater.inflate(R.layout.fragment_notes_empty,container,false);
            fabfrNotes = view.findViewById(R.id.fabNotes);
            fabfrNotes.setonClickListener(v -> {
                Intent intent= new Intent(getContext(),NoteEditorActivity.class);
                startActivity(intent);
            });
        }
        else
        {
            view = inflater.inflate(R.layout.fragment_notes,false);
            ListView listView = view.findViewById(R.id.notesListView);

            arrayAdapter = new ArrayAdapter<>(view.getContext(),simple_list_item_1,notes);

            listView.setAdapter(arrayAdapter);
            listView.setonItemClickListener((parent,view,i,id) -> {
                Intent intent = new Intent(getContext(),NoteEditorActivity.class);
                intent.putExtra("noteId",i);
                startActivity(intent);
            });
        }
        return view;
    }

}

这是我的 NoteEditorAcitivity.java

package com.example.reminderapp;

import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

public class NoteEditorActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_note_editor);

        EditText editTextTitle = findViewById(R.id.editTextNoteTitle);
        EditText editTextContent = findViewById(R.id.editTextNoteContent);

        Intent intent = getIntent();
        int noteId = intent.getIntExtra("noteId",-1);
        if(noteId!=-1){
            editTextTitle.setText(NotesFragment.notes.get(noteId));
        }

        editTextTitle.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s,int start,int count,int after) {

            }

            @Override
            public void onTextChanged(CharSequence s,int before,int count) {
                NotesFragment.notes.set(noteId,String.valueOf(s));
                NotesFragment.arrayAdapter.notifyDataSetChanged();
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }
}

这是我的日志:

java.lang.Arrayindexoutofboundsexception: length=0; index=-1
        at java.util.ArrayList.set(ArrayList.java:455)
        at com.example.reminderapp.NoteEditorActivity$1.onTextChanged(NoteEditorActivity.java:36)
        at android.widget.TextView.sendOnTextChanged(TextView.java:10578)
        at android.widget.TextView.handleTextChanged(TextView.java:10685)
        at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:13568)
        at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1267)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:576)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:507)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:37)
        at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:228)
        at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:141)
        at android.widget.TextView.doKeyDown(TextView.java:8466)
        at android.widget.TextView.onKeyDown(TextView.java:8240)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2842)
        at android.view.View.dispatchKeyEvent(View.java:14247)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
        at com.android.internal.policy.DecorView.superdispatchKeyEvent(DecorView.java:476)
        at com.android.internal.policy.PhoneWindow.superdispatchKeyEvent(PhoneWindow.java:1861)
        at android.app.Activity.dispatchKeyEvent(Activity.java:4085)
        at androidx.core.app.ComponentActivity.superdispatchKeyEvent(ComponentActivity.java:122)
        at androidx.core.view.KeyEventdispatcher.dispatchKeyEvent(KeyEventdispatcher.java:84)
        at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:140)
        at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:569)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
        at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatwindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3054)
        at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:390)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5947)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5815)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5310)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5485)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5542)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5518)
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5676)
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3179)
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2721)
2021-03-02 15:49:39.538 17484-17484/com.example.reminderapp E/AndroidRuntime:     at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2712)
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3156)
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:143)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:335)
        at android.os.Looper.loop(Looper.java:183)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

解决方法

当您尝试访问索引中不存在的项目时,您可能会遇到异常 ArrayIndexOutOfBoundsException。假设您有索引从 0 到 9 的 10 个元素的数组。如果您尝试访问第 11 个或更多索引,您将获得 ArrayIndexOutOfBoundsException

NotesFragment.notes.set(noteId,String.valueOf(s)); NotesFragment.arrayAdapter.notifyDataSetChanged();

上面的第一行试图更新索引 noteId 处的数组中的项目,您收到此错误是因为该索引处没有项目存在。

请确保该 item 存在于索引 noteId 处,您可以在那里添加断点并检查 noteId 的值

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。