概要
CSVで作られたデータセットをまとめて読み込ませたい場面が有りました。
今回はサンプルとして読み込ませたデータをリスト表示させました。
方法
1. assetsディレクトリの作成
app直下にassetsディレクトリを作成し、その下に読み込ませたいcsvを設置します。2. CSVReaderクラスの作成
CSVを読み込ませるクラスを作ります。
CsvReader.java
public class CsvReader {
List<ListData> objects = new ArrayList<ListData>();
public void reader(Context context) {
AssetManager assetManager = context.getResources().getAssets();
try {
// CSVファイルの読み込み
InputStream inputStream = assetManager.open("data.csv");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferReader.readLine()) != null) {
//カンマ区切りで1つづつ配列に入れる
ListData data = new ListData();
String[] RowData = line.split(",");
//CSVの左([0]番目)から順番にセット
data.setId(RowData[0]);
data.setName(RowData[1]);
data.setYomi(RowData[2]);
data.setKentyo(RowData[3]);
data.setYomi_kentyo(RowData[4]);
objects.add(data);
}
bufferReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.Listに表示させたいオブジェクトを作る
GetterとSetterを持つクラスを作ります
ListData.java
public class ListData {
String id;
String name;
String yomi;
String kentyo;
String yomi_kentyo;
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
public void setName (String name){
this.name = name;
}
public String getName(){
return name;
}
public void setYomi(String yomi){
this.yomi = yomi;
}
public String getYomi(){
return yomi;
}
public void setKentyo(String kentyo){
this.kentyo = kentyo;
}
public String getKentyo(){
return kentyo;
}
public void setYomi_kentyo(String yomi_kentyo){
this.yomi_kentyo = yomi_kentyo;
}
public String getYomi_kentyo(){
return yomi_kentyo;
}
}
4. Listの行に使うレイアウトを作る
普通にカスタムなListViewを作るときのように実装します。
今回はサンプルなので何の工夫もない、並べただけのレイアウトです。
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/yomi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/kentyo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/yomi_kentyo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
5.Adapterを作って値を格納
AdapterでListViewに値を格納します。
ListViewAdapter.java
public class ListViewAdapter extends ArrayAdapter<ListData> {
private LayoutInflater layoutInflater;
public ListViewAdapter(Context context, int resource, List<ListData> objects) {
super(context, resource, objects);
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListData data = (ListData)getItem(position);
if (null == convertView) {
convertView = layoutInflater.inflate(R.layout.list_item, null);
}
TextView idText;
TextView nameText;
TextView yomiText;
TextView kentyoText;
TextView yomi_kentyoText;
idText = (TextView)convertView.findViewById(R.id.id);
nameText = (TextView)convertView.findViewById(R.id.name);
yomiText = (TextView)convertView.findViewById(R.id.yomi);
kentyoText = (TextView)convertView.findViewById(R.id.kentyo);
yomi_kentyoText = (TextView)convertView.findViewById(R.id.yomi_kentyo);
idText.setText(data.getId());
nameText.setText(data.getName());
yomiText.setText(data.getYomi());
kentyoText.setText(data.getKentyo());
yomi_kentyoText.setText(data.getYomi_kentyo());
return convertView;
}
}
6.ListViewを表示する
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CsvReader parser = new CsvReader();
parser.reader(getApplicationContext());
ListViewAdapter listViewAdapter = new ListViewAdapter(this, 0, parser.objects);
ListView listView = (ListView)findViewById(R.id.list);
listView.setAdapter(listViewAdapter);
}
}