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;
}
}