如何将从csv生成的arraylist传递给Activity

时间:2019-01-25 16:01:13

标签: java android csv arraylist

我已经创建了两个java文件,这些文件读取.csv每月钓鱼比赛的结果,但是我一直坚持让它显示在活动中。我当时想我需要使用一种意图将数组列表从读取器传递到另一个活动,但是我不确定如何执行此操作,到目前为止,我尝试过的操作会抛出意想不到的结尾,没有方法或未知的变量或字段错误。

想法是最终将其放入表中,但我只想现在显示一些东西

已经尝试过

System.out.println

及其变体

    Intent intent = getIntent();  
    intent.putStringArrayListExtra("OverallBoatCamp", OverallBoatChamp) test);

了解可拆分或可序列化的信息,但有一篇提到arraylist的文章已可序列化

我遇到的教程太简单了,或者只处理简单的数组,或者不说如何显示它。

代码在AIDE中没有错误,logcat显示CSV已被正确读取,并且只有一个ARDT失败的锁定错误。应用程序可以运行并编译良好,但我似乎什么都没显示。

代码是:

BoatLeaderboard.java

      import android.app.*;
      import android.os.*;
      import java.util.*;
      import java.io.*;
      import java.nio.charset.*;
      import org.apache.http.impl.conn.*;
      import android.util.*;
      import android.content.*;

      public class BoatLeaderboards extends Activity
     {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.boatleaderboards);
    getActionBar().setDisplayHomeAsUpEnabled(true);

    readMatchData();

}
private List<OverallBoatChamp> boatchamplist = new ArrayList<>();
private void readMatchData(){

    InputStream is = getResources().openRawResource(R.raw.boatl);
    BufferedReader Reader = new BufferedReader(
    new InputStreamReader (is, Charset.forName("UTF-8"))
    );

    String line = "";
    try {

        //Step over headers
        Reader.readLine();

    while ( (line = Reader.readLine()) != null) {
        Log.d("BoatLeaderboards", "Line: " + line);
        //Split by commas
        String[] tokens = line.split(",");
        //read the data
        OverallBoatChamp champlist = new OverallBoatChamp();
        champlist.setAngler(tokens[0]);
        if (tokens.length >= 2 && tokens[1].length() > 0){
        champlist.setOct(Integer.parseInt(tokens[1]));
        } else {
            champlist.setOct(0);
        }
        if (tokens.length >= 3 && tokens[2].length() > 0){
            champlist.setNov(Integer.parseInt(tokens[2]));
        } else {
            champlist.setNov(0);
        }
        if (tokens.length >= 4 && tokens[3].length() > 0){
            champlist.setDec(Integer.parseInt(tokens[3]));
        } else {
            champlist.setDec(0);
        }
        if (tokens.length >= 5 && tokens[4].length() > 0){
            champlist.setJan(Integer.parseInt(tokens[4]));
        } else {
            champlist.setJan(0);
        }
        if (tokens.length >= 6 && tokens[5].length() > 0){
            champlist.setFeb(Integer.parseInt(tokens[5]));
        } else {
            champlist.setFeb(0);
        }
        if (tokens.length >= 7 && tokens[6].length() > 0){
            champlist.setMar(Integer.parseInt(tokens[6]));
        } else {
            champlist.setMar(0);
        }
        if (tokens.length >= 8 && tokens[7].length() > 0){
            champlist.setApr(Integer.parseInt(tokens[7]));
        } else {
            champlist.setApr(0);
        }
        if (tokens.length >= 9 && tokens[8].length() > 0){
            champlist.setMay(Integer.parseInt(tokens[8]));
        } else {
            champlist.setMay(0);
        }
        if (tokens.length >= 10 && tokens[9].length() > 0){
            champlist.setJun(Integer.parseInt(tokens[9]));
        } else {
            champlist.setJun(0);
        }
        if (tokens.length >= 11 && tokens[10].length() > 0){
            champlist.setJul(Integer.parseInt(tokens[10]));
        } else {
            champlist.setJul(0);
        }
        if (tokens.length >= 12 && tokens[11].length() > 0){
            champlist.setAug(Integer.parseInt(tokens[11]));
        } else {
            champlist.setAug(0);
        }
        if (tokens.length >= 13 && tokens[12].length() > 0){
            champlist.setSep(Integer.parseInt(tokens[12]));
        } else {
            champlist.setSep(0);
        }

        boatchamplist.add(champlist);

        Log.d("BoatLeaderboards","Just created: " + champlist);

    }
    } catch (IOException e){
        Log.wtf("BoatLeaderboards", "Error Reading Data File! on line" + line, e);

        e.printStackTrace();
    }

}

}

OverallBoatChamp.java

   import org.xml.sax.ext.*;

    public class OverallBoatChamp {
private String angler;
private int oct;
private int nov;
private int dec;
private int jan;
private int feb;
private int mar;
private int apr;
private int may;
private int jun;
private int jul;
private int aug;
private int sep;

public String getAngler() {
    return angler;
}

public void setAngler(String angler){
    this.angler = angler;
}

public int getOct() {
    return oct;
}

public void setOct(int oct){
    this.oct = oct;
}

public int getNov() {
    return nov;
}

public void setNov(int nov){
    this.nov = nov;
}

public int getDec() {
    return dec;
}

public void setDec(int dec){
    this.dec = dec;
}

public int getJan() {
    return jan;
}

public void setJan(int jan){
    this.jan = jan;
}

public int getFeb() {
    return feb;
}

public void setFeb(int feb){
    this.feb = feb;
}

public int getMar() {
    return mar;
}

public void setMar(int mar){
    this.mar = mar;
}

public int getApr() {
    return apr;
}

public void setApr(int apr){
    this.apr = apr;
}

public int getMay() {
    return may;
}

public void setMay(int may){
    this.may = may;
}

public int getJun() {
    return jun;
}

public void setJun(int jun){
    this.jun = jun;
}

public int getJul() {
    return jul;
}

public void setJul(int jul){
    this.jul = jul;
}

public int getAug() {
    return aug;
}

public void setAug(int aug){
    this.aug = aug;
}

public int getSep() {
    return sep;
}

public void setSep(int sep){
    this.sep = sep;
}

@Override
public String toString(){
    return "OverallBoatChamp{" +
    "Angler='" + angler + '\''+
    ", Oct=" + oct +
    ", Nov=" + nov +
    ", Dec=" + dec +
    ", Jan=" + jan +
    ", Feb=" + feb +
    ", Mar=" + mar +
    ", Apr=" + apr +
    ", May=" + may +
    ", Jun=" + jun +
    ", Jul=" + jul +
    ", Aug=" + aug +
    ", Sep=" + sep +
    '}';    
    }

}

2 个答案:

答案 0 :(得分:0)

ArrayList仅在其元素类型可序列化时才可序列化,而您的类未实现可序列化。

要传递可序列化的ArrayList,必须使用

intent.putExtra("OverallBoatCamp", OverallBoatChamp) test);

,然后在您要传递ArrayList的活动中

ArrayList<OverallBoatChamp> mArrayList = (ArrayList<OverallBoatChamp>) getIntent().getSerializableExtra("OverallBoatCamp");

但是请记住,可打包比可序列化具有更好的性能。

答案 1 :(得分:0)

让您的类像这样实现Parcelable

public class OverallBoatChamp implements Parcelable {

    public static Parcelable.Creator<OverallBoatChamp> CREATOR = new Parcelable.Creator() {
        @Override
        public OverallBoatChamp createFromParcel(Parcel parcel) {
            return new OverallBoatChamp(parcel);
        }

        @Override
        public OverallBoatChamp[] newArray(int size) {
            return new OverallBoatChamp[size];
        }
    }

    public OverallBoatChamp(Parcel parcel) {
        angler = parcel.readString();
        jan = parcel.readInt();
        // Do the same for all other fields
    }

    @Override
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeString(angler);
        parcel.writeInt(jan);
        // Do the same for all other fields
    }

    @Override
    public int describeContents() {
        return 0;
    }

    // Your getters and setters

}

然后使用以下代码通过意图传递数据:

intent.putParcelableArrayListExtra("OverallBoatChamp", overallBoatChamps);

在您的活动中:

ArrayList<OverallBoatChamp> overallBoatChamps = getIntent().getParcelableArrayListExtra("OverallBoatChamp");

提示:将您的意图附加键存储在常量中,通常存储在附加项所属的活动中。