0

In my application I need to show some columns out of about 60, in a listview. The data comes from a csv file already obtained through a url but if the columns are the first 2 I have no problems but in this case I need the 25th and 26th and for this it creates the error shown in the title below. I show the code:

LogerView.java

    package com.nuboo.okhttp;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;

    import okhttp3.Call;
    import okhttp3.Callback;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;

    public class LogerView extends AppCompatActivity {

    //CSVAdapter mAdapter;

    TextView text;
    ListView mList;
    private OkHttpClient client;
    String csvFile, responseData;
    State[] animalList;
    InputStream stream;
    CSVAdapter mAdapter;


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

        text = findViewById(R.id.text);

        client = new OkHttpClient();
        String url = "http://hekolo6.altervista.org/bus_stop.csv";
        getWebResponse(url);



    }


    private void getWebResponse(String url) {
        Request request = new Request.Builder().url(url).build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (!response.isSuccessful()) {
                    throw new IOException("Qualcosa non รจ andato bene");
                }

                responseData = response.body().string();


                runOnUiThread(new Runnable() {
                    @RequiresApi(api = Build.VERSION_CODES.N)
                    @Override
                    public void run() {
                        text.setText(" ");
                        csvFile = responseData;
                        stream = new 
    ByteArrayInputStream(responseData.getBytes(StandardCharsets.UTF_8));
                        Log.d("test inputStrem", String.valueOf(stream));
                        Log.d("test responseData", responseData);
                        Log.e("responseData1", responseData);

                        mAdapter = new CSVAdapter(LogerView.this, responseData, -1);
                        mList = findViewById(R.id.mList);

                        mList.setAdapter(mAdapter);


                        mList.setOnItemClickListener(new 
    AdapterView.OnItemClickListener() {
                            @Override
                            public void onItemClick(AdapterView<?> adapterView, View v, 
    int pos, long id) {
                                Toast.makeText(v.getContext(), 
    mAdapter.getItem(pos).getNominativoDestinatario(), Toast.LENGTH_SHORT).show();
                            }
                        });



                    }
                });
            }
        });
    }



    }

CSVAdapter.java

    public class CSVAdapter extends ArrayAdapter<State>{
    Context ctx;
    String ResponseData;
    InputStream is;

    //We must accept the textViewResourceId parameter, but it will be unused
    //for the purposes of this example.
    public CSVAdapter(Context context, String responseData, int textViewResourceId) {
        super(context, textViewResourceId);

        ResponseData = responseData;
        Log.e("responseData", responseData);
        is = new ByteArrayInputStream(responseData.getBytes(StandardCharsets.UTF_8));
        //Store a reference to the Context so we can use it to load a file from Assets.
        this.ctx = context;

        //Load the data.
        loadArrayFromFile();
    }



    /*
     * getView() is the method responsible for building a View out of a some data that 
    represents
     * one row within the ListView. For this example our row will be a single TextView 
    that
     * gets populated with the state name.
     * (non-Javadoc)
     * @see android.widget.ArrayAdapter#getView(int, android.view.View, 
    android.view.ViewGroup)
     */
    @Override
    public View getView(final int pos, View convertView, final ViewGroup parent){
        /*
         * Using convertView is important. The system will pass back Views that have been
         * created but scrolled off of the top (or bottom) of the screen, and thus are no
         * longer being shown on the screen. Since they are unused, we can "recycle" them
         * instead of creating a new View object for every row, which would be wasteful,
         * and lead to poor performance. The diference may not be noticeable in this
         * small example. But with larger more complex projects it will make a 
    significant
         * improvement by recycling Views rather than creating new ones for each row.
         */
        TextView mView = (TextView)convertView;
        TextView  subView = (TextView)convertView;
        //If convertView was null then we have to create a new TextView.
        //If it was not null then we'll re-use it by setting the appropriate
        //text String to it.
        if(null == mView){
            mView = new TextView(parent.getContext());
            subView = new TextView(mView.getContext());
            mView.setTextSize(20);
            subView.setTextSize(20);
        }

        //Set the state name as the text.
        mView.setText(getItem(pos).getIndirizzoDestinatario());
        subView.setText(getItem(pos).getNominativoDestinatario());


        //We could handle the row clicks from here. But instead
        //we'll use the ListView.OnItemClickListener from inside
        //of MainActivity, which provides some benefits over doing it here.

        /*mView.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Toast.makeText(parent.getContext(), getItem(pos).getCapital(), 
    Toast.LENGTH_SHORT).show();
            }
        });*/

        return mView;
    }

    /*
     * Helper method that loads the data from the states.csv and builds
     * each csv row into a State object which then gets added to the Adapter.
     */



    private void loadArrayFromFile(){
        try {
            // Get input stream and Buffered Reader for our data file.
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line;

            //Read each line
            while ((line = reader.readLine()) != null) {

                //Split to separate the name from the capital
                String[] RowData = line.split(";");


                //Create a State object for this row's data.

                State cur = new State();
                State cor = new State();

                cur.setNominativoDestinatario(RowData[25]);
                cor.setIndirizzoDestinatario(RowData[26]);



                //Add the State object to the ArrayList (in this case we are the 
    ArrayList).
                this.add(cur);
                CSVAdapter.this.add(cor);



            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    }

State.java

    public class State {

    private String RifClienteWeb;
    private String CodAzienda;
    private String AnnoOrdine;
    private String FilialeOrdine;
    private String NumOrdine;
    private String DataOrdine;
    private String Servizio;
    private String Tipologia;
    private String NumDocCorrisp;
    private String DataDocCorrisp;
    private String BarCodeBolla;
    private String PrioritaConsegna;
    private String DescrServizio;
    private String DescrTipologia;
    private String Ritiro;
    private String Porto;
    private String CodCliente;
    private String DescrCliente;
    private String NominativoMittente;
    private String IndirizzoMittente;
    private String CapMittente;
    private String LocalitaMittente;
    private String PrMittente;
    private String TelMittente;
    private String EmailMittente;
    private String FlagM;
    private String NominativoDestinatario;
    private String IndirizzoDestinatario;
    private String CapDestinatario;
    private String LocalitaDestinatario;
    private String PrDestinatario;
    private String TelDestinatario;
    private String EmailDestinatario;
    private String NoteOrdine;
    private String NPallet;
    private String NBancali;
    private String NColli;
    private String PesoLordo;
    private String VolumeMc;
    private String ValoreTassabile;
    private String DaFatturare;
    private String Flag2;
    private String Flag3;
    private String TipoDocTrasporto;
    private String TipoMovimCassa;
    private String ImpDaIncassare;
    private String ModalitaIncasso;
    private String Flag6;
    private String AnnoBorderau;
    private String FilialeBord;
    private String NumBord;
    private String DataEmissioneBord;
    private String OraEmissioneBord;
    private String CodAutista;
    private String Autista;
    private String TargaAutomezzo;
    private String NumOrdiniTotDelBord;
    private String ProgOrdineSuBord;
    private String DataConsegnaTassa;
    private String FlagPreavvTel;
    private String Spazi;

    public String getRifClienteWeb() {
        return RifClienteWeb;
    }

    public void setRifClienteWeb(String rifClienteWeb) {
        RifClienteWeb = rifClienteWeb;
    }

    public String getCodAzienda() {
        return CodAzienda;
    }

    public void setCodAzienda(String codAzienda) {
        CodAzienda = codAzienda;
    }

    public String getAnnoOrdine() {
        return AnnoOrdine;
    }

    public void setAnnoOrdine(String annoOrdine) {
        AnnoOrdine = annoOrdine;
    }

    public String getFilialeOrdine() {
        return FilialeOrdine;
    }

    public void setFilialeOrdine(String filialeOrdine) {
        FilialeOrdine = filialeOrdine;
    }

    public String getNumOrdine() {
        return NumOrdine;
    }

    public void setNumOrdine(String numOrdine) {
        NumOrdine = numOrdine;
    }

    public String getDataOrdine() {
        return DataOrdine;
    }

    public void setDataOrdine(String dataOrdine) {
        DataOrdine = dataOrdine;
    }

    public String getServizio() {
        return Servizio;
    }

    public void setServizio(String servizio) {
        Servizio = servizio;
    }

    public String getTipologia() {
        return Tipologia;
    }

    public void setTipologia(String tipologia) {
        Tipologia = tipologia;
    }

    public String getNumDocCorrisp() {
        return NumDocCorrisp;
    }

    public void setNumDocCorrisp(String numDocCorrisp) {
        NumDocCorrisp = numDocCorrisp;
    }

    public String getDataDocCorrisp() {
        return DataDocCorrisp;
    }

    public void setDataDocCorrisp(String dataDocCorrisp) {
        DataDocCorrisp = dataDocCorrisp;
    }

    public String getBarCodeBolla() {
        return BarCodeBolla;
    }

    public void setBarCodeBolla(String barCodeBolla) {
        BarCodeBolla = barCodeBolla;
    }

    public String getPrioritaConsegna() {
        return PrioritaConsegna;
    }

    public void setPrioritaConsegna(String prioritaConsegna) {
        PrioritaConsegna = prioritaConsegna;
    }

    public String getDescrServizio() {
        return DescrServizio;
    }

    public void setDescrServizio(String descrServizio) {
        DescrServizio = descrServizio;
    }

    public String getDescrTipologia() {
        return DescrTipologia;
    }

    public void setDescrTipologia(String descrTipologia) {
        DescrTipologia = descrTipologia;
    }

    public String getRitiro() {
        return Ritiro;
    }

    public void setRitiro(String ritiro) {
        Ritiro = ritiro;
    }

    public String getPorto() {
        return Porto;
    }

    public void setPorto(String porto) {
        Porto = porto;
    }

    public String getCodCliente() {
        return CodCliente;
    }

    public void setCodCliente(String codCliente) {
        CodCliente = codCliente;
    }

    public String getDescrCliente() {
        return DescrCliente;
    }

    public void setDescrCliente(String descrCliente) {
        DescrCliente = descrCliente;
    }

    public String getNominativoMittente() {
        return NominativoMittente;
    }

    public void setNominativoMittente(String nominativoMittente) {
        NominativoMittente = nominativoMittente;
    }

    public String getIndirizzoMittente() {
        return IndirizzoMittente;
    }

    public State setIndirizzoMittente(String indirizzoMittente) {
        IndirizzoMittente = indirizzoMittente;
        return null;
    }

    public String getCapMittente() {
        return CapMittente;
    }

    public void setCapMittente(String capMittente) {
        CapMittente = capMittente;
    }

    public String getLocalitaMittente() {
        return LocalitaMittente;
    }

    public void setLocalitaMittente(String localitaMittente) {
        LocalitaMittente = localitaMittente;
    }

    public String getPrMittente() {
        return PrMittente;
    }

    public void setPrMittente(String prMittente) {
        PrMittente = prMittente;
    }

    public String getTelMittente() {
        return TelMittente;
    }

    public void setTelMittente(String telMittente) {
        TelMittente = telMittente;
    }

    public String getEmailMittente() {
        return EmailMittente;
    }

    public void setEmailMittente(String emailMittente) {
        EmailMittente = emailMittente;
    }

    public String getFlagM() {
        return FlagM;
    }

    public void setFlagM(String flagM) {
        FlagM = flagM;
    }

    public String getNominativoDestinatario() {
        return NominativoDestinatario;
    }

    public void setNominativoDestinatario(String nominativoDestinatario) {
        NominativoDestinatario = nominativoDestinatario;
    }

    public String getIndirizzoDestinatario() {
        return IndirizzoDestinatario;
    }

    public void setIndirizzoDestinatario(String indirizzoDestinatario) {
        IndirizzoDestinatario = indirizzoDestinatario;
    }

    public String getCapDestinatario() {
        return CapDestinatario;
    }

    public void setCapDestinatario(String capDestinatario) {
        CapDestinatario = capDestinatario;
    }

    public String getLocalitaDestinatario() {
        return LocalitaDestinatario;
    }

    public void setLocalitaDestinatario(String localitaDestinatario) {
        LocalitaDestinatario = localitaDestinatario;
    }

    public String getPrDestinatario() {
        return PrDestinatario;
    }

    public void setPrDestinatario(String prDestinatario) {
        PrDestinatario = prDestinatario;
    }

    public String getTelDestinatario() {
        return TelDestinatario;
    }

    public void setTelDestinatario(String telDestinatario) {
        TelDestinatario = telDestinatario;
    }

    public String getEmailDestinatario() {
        return EmailDestinatario;
    }

    public void setEmailDestinatario(String emailDestinatario) {
        EmailDestinatario = emailDestinatario;
    }

    public String getNoteOrdine() {
        return NoteOrdine;
    }

    public void setNoteOrdine(String noteOrdine) {
        NoteOrdine = noteOrdine;
    }

    public String getNPallet() {
        return NPallet;
    }

    public void setNPallet(String NPallet) {
        this.NPallet = NPallet;
    }

    public String getNBancali() {
        return NBancali;
    }

    public void setNBancali(String NBancali) {
        this.NBancali = NBancali;
    }

    public String getNColli() {
        return NColli;
    }

    public void setNColli(String NColli) {
        this.NColli = NColli;
    }

    public String getPesoLordo() {
        return PesoLordo;
    }

    public void setPesoLordo(String pesoLordo) {
        PesoLordo = pesoLordo;
    }

    public String getVolumeMc() {
        return VolumeMc;
    }

    public void setVolumeMc(String volumeMc) {
        VolumeMc = volumeMc;
    }

    public String getValoreTassabile() {
        return ValoreTassabile;
    }

    public void setValoreTassabile(String valoreTassabile) {
        ValoreTassabile = valoreTassabile;
    }

    public String getDaFatturare() {
        return DaFatturare;
    }

    public void setDaFatturare(String daFatturare) {
        DaFatturare = daFatturare;
    }

    public String getFlag2() {
        return Flag2;
    }

    public void setFlag2(String flag2) {
        Flag2 = flag2;
    }

    public String getFlag3() {
        return Flag3;
    }

    public void setFlag3(String flag3) {
        Flag3 = flag3;
    }

    public String getTipoDocTrasporto() {
        return TipoDocTrasporto;
    }

    public void setTipoDocTrasporto(String tipoDocTrasporto) {
        TipoDocTrasporto = tipoDocTrasporto;
    }

    public String getTipoMovimCassa() {
        return TipoMovimCassa;
    }

    public void setTipoMovimCassa(String tipoMovimCassa) {
        TipoMovimCassa = tipoMovimCassa;
    }

    public String getImpDaIncassare() {
        return ImpDaIncassare;
    }

    public void setImpDaIncassare(String impDaIncassare) {
        ImpDaIncassare = impDaIncassare;
    }

    public String getModalitaIncasso() {
        return ModalitaIncasso;
    }

    public void setModalitaIncasso(String modalitaIncasso) {
        ModalitaIncasso = modalitaIncasso;
    }

    public String getFlag6() {
        return Flag6;
    }

    public void setFlag6(String flag6) {
        Flag6 = flag6;
    }

    public String getAnnoBorderau() {
        return AnnoBorderau;
    }

    public void setAnnoBorderau(String annoBorderau) {
        AnnoBorderau = annoBorderau;
    }

    public String getFilialeBord() {
        return FilialeBord;
    }

    public void setFilialeBord(String filialeBord) {
        FilialeBord = filialeBord;
    }

    public String getNumBord() {
        return NumBord;
    }

    public void setNumBord(String numBord) {
        NumBord = numBord;
    }

    public String getDataEmissioneBord() {
        return DataEmissioneBord;
    }

    public void setDataEmissioneBord(String dataEmissioneBord) {
        DataEmissioneBord = dataEmissioneBord;
    }

    public String getOraEmissioneBord() {
        return OraEmissioneBord;
    }

    public void setOraEmissioneBord(String oraEmissioneBord) {
        OraEmissioneBord = oraEmissioneBord;
    }

    public String getCodAutista() {
        return CodAutista;
    }

    public void setCodAutista(String codAutista) {
        CodAutista = codAutista;
    }

    public String getAutista() {
        return Autista;
    }

    public void setAutista(String autista) {
        Autista = autista;
    }

    public String getTargaAutomezzo() {
        return TargaAutomezzo;
    }

    public void setTargaAutomezzo(String targaAutomezzo) {
        TargaAutomezzo = targaAutomezzo;
    }

    public String getNumOrdiniTotDelBord() {
        return NumOrdiniTotDelBord;
    }

    public void setNumOrdiniTotDelBord(String numOrdiniTotDelBord) {
        NumOrdiniTotDelBord = numOrdiniTotDelBord;
    }

    public String getProgOrdineSuBord() {
        return ProgOrdineSuBord;
    }

    public void setProgOrdineSuBord(String progOrdineSuBord) {
        ProgOrdineSuBord = progOrdineSuBord;
    }

    public String getDataConsegnaTassa() {
        return DataConsegnaTassa;
    }

    public void setDataConsegnaTassa(String dataConsegnaTassa) {
        DataConsegnaTassa = dataConsegnaTassa;
    }

    public String getFlagPreavvTel() {
        return FlagPreavvTel;
    }

    public void setFlagPreavvTel(String flagPreavvTel) {
        FlagPreavvTel = flagPreavvTel;
    }

    public String getSpazi() {
        return Spazi;
    }

    public void setSpazi(String spazi) {
        Spazi = spazi;
    }













    }
  • And unrelated: learn about java naming conventions. field names, like variables should go camelCase. Only class names go UpperCase, therefore all fields in the State class are problematic. โ€“ GhostCat Oct 18 '21 at 11:16
  • Look at your csv file. The last 2 lines contain less than 26 fields separated by semicolon: `*****EOF*****;` followed by an empty line. โ€“ Alex Oct 18 '21 at 11:39
  • since i can't change the csv file is there a way around the problem? โ€“ davideloddeDev360 Oct 18 '21 at 14:29

0 Answers0