Разбор JSON для Android-студии: ArrayIndexOutOfBoundsException - PullRequest
0 голосов
/ 07 января 2019

У меня есть приложение, которое анализирует данные JSON и отображает их в виде переработчика. Если пользователь щелкает элемент в представлении переработчика, он направляется к новому действию, перенося данные JSON в это действие. На данный момент данные JSON анализируются в представлении переработчика без проблем. Когда я щелкаю один из объектов, приложение вылетает с ArrayIndexOutOfBoundsException и направляет меня в мой класс Recycler View Adapter. Видимо я пытаюсь получить доступ к индексу -1.

Ошибка Logcat: enter image description here

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. Я пропустил все файлы макетов только потому, что их так много, но если вам, ребята, нужно посмотреть конкретный файл, дайте мне знать. Я ценю любую обратную связь или вклад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...