У меня есть приложение, которое анализирует данные JSON и отображает их в виде переработчика. Если пользователь щелкает элемент в представлении переработчика, он направляется к новому действию, перенося данные JSON в это действие. На данный момент данные JSON анализируются в представлении переработчика без проблем. Когда я щелкаю один из объектов, приложение вылетает с ArrayIndexOutOfBoundsException и направляет меня в мой класс Recycler View Adapter. Видимо я пытаюсь получить доступ к индексу -1.
Ошибка Logcat:
RecyclerViewAdapter Class: говорят, что ошибка в моем методе OnClick в строке 37.
package com.example.gabe.politicianspulse;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;
public class RefRvAdapter extends RecyclerView.Adapter<RefRvAdapter.MyViewHolder>{
private Context context;
private List<Refs> refsList;
public RefRvAdapter(){}
public RefRvAdapter(List<Refs> refList, Context context){
this.refsList = refList;
this.context = context;
}
@NonNull
@Override
public RefRvAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view;
LayoutInflater mInflater = LayoutInflater.from(context);
view = mInflater.inflate(R.layout.ref_card, viewGroup, false);
final MyViewHolder viewHolder = new MyViewHolder(view);
viewHolder.view_containers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent (context, SingleReferendum.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("referendumTitle", refsList.get(viewHolder.getAdapterPosition()).getRefTitle());
i.putExtra("referendumSubtitle", refsList.get(viewHolder.getAdapterPosition()).getRefSub());
i.putExtra("referendumUrl", refsList.get(viewHolder.getAdapterPosition()).getRefUrl());
context.startActivity(i);
}
});
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RefRvAdapter.MyViewHolder myViewHolder, int i) {
myViewHolder.refTitle.setText(refsList.get(i).getRefTitle());
myViewHolder.refSub.setText(refsList.get(i).getRefSub());
}
@Override
public int getItemCount() {
return refsList.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
TextView refTitle, refSub;
LinearLayout view_containers;
public MyViewHolder(View itemView){
super(itemView);
refTitle = itemView.findViewById(R.id.ref_title);
refSub = itemView.findViewById(R.id.ref_sub);
view_containers = itemView.findViewById(R.id.view_container_ref);
}
}
}
Класс SingleReferendum: это класс, в который я хочу загрузить данные JSON из представления переработчика.
package com.example.gabe.politicianspulse;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class SingleReferendum extends AppCompatActivity {
private List<Refs> refList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_referendum);
refList = new ArrayList<>();
//retrieve data
String title = getIntent().getExtras().getString("referendumTitle");
String subtitle = getIntent().getExtras().getString("referendumSubtitle");
String url = getIntent().getExtras().getString("referendumUrl");
//initialize views
TextView title_tv = findViewById(R.id.title);
TextView subtitle_tv = findViewById(R.id.subtitle);
TextView url_tv = findViewById(R.id.url);
//set string values to each view
title_tv.setText(title);
subtitle_tv.setText(subtitle);
url_tv.setText(url);
}
}
Почему я получаю эту ошибку? Что это значит? Этот сбой происходит только тогда, когда я вызываю метод onClick. Я пропустил все файлы макетов только потому, что их так много, но если вам, ребята, нужно посмотреть конкретный файл, дайте мне знать. Я ценю любую обратную связь или вклад.