LoginSignup
23
28

More than 5 years have passed since last update.

AndroidでCSVファイルを読み込んでリスト表示する

Last updated at Posted at 2017-07-23

概要

CSVで作られたデータセットをまとめて読み込ませたい場面が有りました。
今回はサンプルとして読み込ませたデータをリスト表示させました。

Screenshot_1500765377.png

方法

1. assetsディレクトリの作成

スクリーンショット 2017-07-23 9.17.14.png
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);
    }
}

7. 完成~

完成です。
Screenshot_1500765377.png

23
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
28