1. mii-chang

    Posted

    mii-chang
Changes in title
+AndroidでCSVファイルを読み込んでリスト表示する
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,206 @@
+## 概要
+CSVで作られたデータセットをまとめて読み込ませたい場面が有りました。
+今回はサンプルとして読み込ませたデータをリスト表示させました。
+
+![Screenshot_1500765377.png](https://qiita-image-store.s3.amazonaws.com/0/93899/a321fdf7-6561-e968-44ec-f65c1364cc2a.png)
+
+
+## 方法
+### 1. assetsディレクトリの作成
+<img width="311" alt="スクリーンショット 2017-07-23 9.17.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/93899/7ad1791c-d202-5509-a9be-6e0020fb11cb.png">
+app直下にassetsディレクトリを作成し、その下に読み込ませたいcsvを設置します。
+
+### 2. CSVReaderクラスの作成
+CSVを読み込ませるクラスを作ります。
+
+```java: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を持つクラスを作ります
+
+```java: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を作るときのように実装します。
+今回はサンプルなので何の工夫もない、並べただけのレイアウトです。
+
+```xml:ListData.java
+<?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に値を格納します。
+
+```java:ListData.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を表示する
+
+```java: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);
+ }
+}
+```
+
+### 7. 完成~
+完成です。
+![Screenshot_1500765377.png](https://qiita-image-store.s3.amazonaws.com/0/93899/71023b9e-a66d-0fa6-08e9-da4fcff81ec9.png)