[英]How to pass arraylist generated from csv to Activity
我創建了兩個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 +
'}';
}
}
ArrayList僅在其元素類型可序列化時才可序列化,而您的類未實現可序列化。
要傳遞可序列化的ArrayList,必須使用
intent.putExtra("OverallBoatCamp", OverallBoatChamp) test);
然后在要傳遞ArrayList的活動中
ArrayList<OverallBoatChamp> mArrayList = (ArrayList<OverallBoatChamp>) getIntent().getSerializableExtra("OverallBoatCamp");
但是請記住,可打包比可序列化具有更好的性能。
讓您的班這樣實現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");
提示:將您的意圖附加鍵存儲在常量中,通常存儲在附加值所屬的活動中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.