java.lang.IndexOutOfBoundsException:索引:7,大小:7。为什么会这样?

java.lang.IndexOutOfBoundsException: Index: 7, Size: 7. Why is this happening?

适配器代码:

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class quotesAdapter extends RecyclerView.Adapter<quotesAdapter.quotesViewHolder> {

    private List<String> quotes;
    private List<String> authors;
    private List<ImageView> images = null;
    private Context context;

    public quotesAdapter(List<String> quotes, QuotesActivity quotesActivity, List<String> authors, Context context) {
        this.quotes = quotes;
        this.authors = authors;
        this.context = context;
    }


    @NonNull
    @Override
    public quotesViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.example_item_quotes, viewGroup, false);

//        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item_quotes, parent, false);
//        RecyclerView.ViewHolder holder = new RecyclerView.ViewHolder(view) {

        return new quotesViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull quotesViewHolder holder, int i) {
        String[] colors = {"#952222", "#10171B", "#FF373535", "#ECE3D3", "#10171B","#10171B","#10171B","#10171B","#10171B","#10171B","#10171B","#10171B","#10171B"};
        String quote = quotes.get(i);
        ***String author = authors.get(i);***
        holder.txtQuote.setText(quote);
        holder.txtAuthor.setText(author);
        int color = i % colors.length;
        int intColor = Color.parseColor(colors[color]);
        holder.quoteContainer.setBackgroundColor(intColor);
        holder.txtQuote.setBackgroundColor(intColor);
        holder.txtAuthor.setBackgroundColor(intColor);

    }

    @Override
    public int getItemCount() {
        return quotes.size();
    }

    public static class quotesViewHolder extends RecyclerView.ViewHolder {

        TextView txtQuote;
        TextView txtAuthor;
        LinearLayout quoteContainer;

        public quotesViewHolder(@NonNull View itemView) {
            super(itemView);
            txtQuote = itemView.findViewById(R.id.txtQuote);
            txtAuthor = itemView.findViewById(R.id.txtAuthor);
            quoteContainer = itemView.findViewById(R.id.quotesContainer);
        }
    }
}

activity的代码:

import android.media.Image;
import android.os.Bundle;
import android.widget.ImageView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class QuotesActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quotes_act);
        RecyclerView quotesList = findViewById(R.id.quotesList);
        quotesList.setLayoutManager(new LinearLayoutManager(this));
        quotesList.setAdapter(new quotesAdapter(getQuotes(), this,getAuthors(),this));
    }

    private List<String> getQuotes() {
        List<String> quotes = new ArrayList<>();
        BufferedReader bufferedReader = null;

        try {
            bufferedReader = new BufferedReader(new InputStreamReader(this.getAssets().open("quotes.txt"), "UTF-8"));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                quotes.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return quotes;
    }

    private List<String> getAuthors() {
        List<String> authors = new ArrayList<>();
        BufferedReader bufferedReader = null;

        try {
            bufferedReader = new BufferedReader(new InputStreamReader(this.getAssets().open("authors.txt"), "UTF-8"));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                authors.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return authors;
    }

}

错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: konak.labs.warstoriesv2, PID: 820
    java.lang.IndexOutOfBoundsException: Index: 7, Size: 7
        at java.util.ArrayList.get(ArrayList.java:437)
        at konak.labs.warstoriesv2.quotesAdapter.onBindViewHolder(quotesAdapter.java:47)
        at konak.labs.warstoriesv2.quotesAdapter.onBindViewHolder(quotesAdapter.java:17)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
        at androidx.recyclerview.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:286)
        at androidx.recyclerview.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:343)
        at androidx.recyclerview.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:359)
        at androidx.recyclerview.widget.GapWorker.prefetch(GapWorker.java:366)
        at androidx.recyclerview.widget.GapWorker.run(GapWorker.java:397)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

quotes.txt 和 authors.txt 在我项目的 res 文件夹中。此外,该应用程序确实显示了 getAuthors 和 getQuotes 的前几个实例,但在显示这些实例后崩溃了。我不知道为什么会崩溃。也许如果我在我的适配器代码中抛出异常以在没有更多项目可查看时处理。但是当作者包含在适配器代码中时会发生崩溃。我从 recyclerview 中删除了作者列表,引号确实正确显示而没有崩溃,即使没有任何内容可显示(没有更多引号)。

有什么帮助吗?

索引从0开始。因此,对于大小为7的数组,索引将从0到6。

  • 如果索引为0,那么它指的是数组的第一个元素
  • 如果索引为1,那么它指的是第二个元素
  • ...

错误

java.lang.IndexOutOfBoundsException: Index: 7, Size: 7

表示

数组只有 7 个元素,但试图提取第 8 个元素。