質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

3回答

2177閲覧

AndroidStudioで、csvから配列に入れて使いたい

3bji

総合スコア13

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/04/27 06:21

編集2022/01/12 10:55

前提・実現したいこと

AndroidStudioでcsvから配列に入れて使いたい。

Google Map上に、複数(最終的には300個くらい)の
マーカーを設置したい。

CSVファイルに入っている緯度・経度を配列に入れて使いたい。

とりあえず、手動で配列をつくって
地図上にマーカーを出せるようにはなったのですが、
(その状態を貼り付けます。)

300近くも手動で解列に入れるなんて無理なので
CSVファイルを読み込んで自動で配列に入れて
使えるようにしたい。

CSVファイルを読み込んで
手動で配列に入れていた部分と同じことを
できるようにしたい。

すべて1から10まで教えていただくのも悪いと思うので、
参考になるものがあれば教えていただきたいと質問しました。

(補足)
KeyやAreaCode、KindCodeは
今回の質問とは関係ありませんが
後々追加したい機能のために設定してるものです。

発生している問題・エラーメッセージ

CSVファイルを読み込んでリスト表示するサンプルプログラムを見たが、
私のプログラムでは「建物クラス」を作っているので
サンプルプログラムそのままでは使えないので困ってしまいました。

該当のソースコード

java

1//質問と関係ない部分 ここから 2 3public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 4 5 private GoogleMap mMap; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_maps); 11 // Obtain the SupportMapFragment and get notified when the map is ready to be used. 12 SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 13 .findFragmentById(R.id.map); 14 mapFragment.getMapAsync(this); 15 } 16 17 @Override 18 public void onMapReady(GoogleMap googleMap ) { 19 mMap = googleMap; 20 21 UiSettings settings = mMap.getUiSettings(); 22 settings.setCompassEnabled(true); 23 settings.setZoomControlsEnabled(true); 24 settings.setZoomGesturesEnabled(true); 25 settings.setTiltGesturesEnabled(true); 26 settings.setScrollGesturesEnabled(true); 27 settings.setRotateGesturesEnabled(true); 28 29 mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 30 31 LatLng start = new LatLng(35.-----,139.-----); //座標はプライバシー保護してます 32 mMap.moveCamera(CameraUpdateFactory.newLatLng(start)); 33 34//質問と関係ない部分 ここまで 35 36 37 Tatemono tatemonoData[]; 38 tatemonoData = new Tatemono[10]; 39 for(int i=0; i<tatemonoData.length; i++) { 40 tatemonoData[i] = new Tatemono(); 41 } 42 43 //座標はプライバシー保護してます 44 //手動配列入れ 45 tatemonoData[0].setKey("001"); 46 tatemonoData[0].setAreaCode("Map01"); 47 tatemonoData[0].setKindCode("Kind01"); 48 tatemonoData[0].setNorthLat(35.-----); 49 tatemonoData[0].setEastLong(139.-----); 50 51 tatemonoData[1].setKey("002"); 52 tatemonoData[1].setAreaCode("Map02"); 53 tatemonoData[1].setKindCode("Kind01"); 54 tatemonoData[1].setNorthLat(35.-----); 55 tatemonoData[1].setEastLong(139.-----); 56 57 tatemonoData[2].setKey("003"); 58 tatemonoData[2].setAreaCode("Map01"); 59 tatemonoData[2].setKindCode("Kind02"); 60 tatemonoData[2].setNorthLat(35.-----); 61 tatemonoData[2].setEastLong(139.-----); 62 63 tatemonoData[3].setKey("004"); 64 tatemonoData[3].setAreaCode("Map02"); 65 tatemonoData[3].setKindCode("Kind01"); 66 tatemonoData[3].setNorthLat(35.-----); 67 tatemonoData[3].setEastLong(139.-----); 68 69 //手動配列入れ終わり 70 71 //マーカーを設置する 72 for(int i=0; i<tatemonoData.length; i++) { 73 74 //座標を設定 75 LatLng latLng = new LatLng(tatemonoData[i].getNorthLat(), tatemonoData[i].getEastLong()); 76 //マーカー設置 77 mMap.addMarker(new MarkerOptions().position(latLng)); 78 } 79 80}

【建物クラス】

java

1 2import android.provider.Settings; 3 4public class Tatemono { 5 6 private String key; 7 private String areaCode; 8 private String kindCode; 9 private double northLat; 10 private double eastLong; 11 12 public void setKey(String s){ 13 if (s.equals(" ")) { 14 System.out.println("エラー"); 15 }else { key = s; } 16 } 17 18 public void setAreaCode(String area) { this.areaCode = areaCode; } 19 public void setKindCode(String kind) { this.kindCode = kindCode; } 20 public void setNorthLat(double northLat) { this.northLat = northLat; } 21 public void setEastLong(double eastLong) { this.eastLong = eastLong; } 22 23 public String getKey(){ return key; } 24 public String getAreaCode(){ return areaCode; } 25 public String getKindCode(){ return kindCode; } 26 public double getNorthLat(){ return northLat; } 27 public double getEastLong(){ return eastLong; } 28}

試したこと

以下のページは見たのですが、
Java初心者すぎて、どう自分のプログラムに生かせば良いかわかりませんでした。

https://techacademy.jp/magazine/19078

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/04/27 07:38

javaコードの箇所は「```java」と「```」 の行で挟みますと(入力領域の上にある"<code>"をクリックすると雛形が挿入されます)コード用のフォーマットになり, インデントが反映されて見易くなったりキーワードのフォントが自動で変わったりコピペがし易くなったりしますので, ご活用願えますか.
3bji

2019/04/28 06:26

教えてくださりありがとうございました。編集しました。
stdio

2019/05/09 01:20

どんなアプリなのか全くイメージが出来ない。 「地図上にマーカーを出せるようにはなった」とあるのでまずその状態の画面キャプチャー張り付けて下さい。 後、「300近くも手動で解列に入れるなんて無理なので」とありますが普通にデバック目的ならやる事ありますよ。その程度の根気がないなら作るなという結論に至りそうなのですが...
guest

回答3

0

参考URL https://teratail.com/questions/134556

上記が参考になると思います。

以下、修正点

ArrayList<String> list = new ArrayList<>(); // ↓ ArrayList<Tatemono> list = new ArrayList<>(); list.add(line.split("\t", 0)); // 行をタブ区切りで配列に変換 // ↓ list.add( new Tatemono(line.split("\t"))); // constractor add public Tatemono( String key, String areaCode, String kindCode, String northLat, String eastLong) { this.key = key ; this.areaCode = areaCode; this.kindCode = kindCode ; this.northLat = Double.parseDouble(northLat); this.eastLong = Double.parseDouble(eastLong); }

android でしたね
以下が参考になると思います。
https://qiita.com/mii-chang/items/94fad3a778377a18ccf5

投稿2019/05/17 04:46

編集2019/05/17 04:49
kamikaze.cappa

総合スコア558

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

簡単なCSV読み込みについて

質問で貼られたJavaでCSVファイルを読み込む方法 (https://techacademy.jp/magazine/19078)は、CSV読み込み用のライブラリを使わず、なるべく自分で書いていくというものです。

勉強のためには良いと思いますが、めんどうだったり理解するのが大変だったりする場合、自分で書かずに便利なCSV読み込み用ライブラリを使ってはどうでしょうか。
opencsvなどがあります。

opencsvの使い方
これを使えば、下のようにして簡単に読み込むことができます。

Java

1CSVReader reader=new CSVReader(new FileReader(new File("tatemono.csv"))); 2List<String[]> tatemonocsv=reader.readAll();

読みこんだCSVのデータの、建物クラスへの渡し方について

あとはご自分のtatemonoDataたちにfor文などでリストtatemonocsvから読み込んでいけばいいです。

Javaはしばらく触ってなくてもしかしたら書き方を間違ってるかもしれませんが、イメージ的には以下のような感じです

Java

1for(int index=0; index < num_tatemono; index++){ 2 tatemonoData[index].setKey(tatemonocsv.get(index)[0]); 3 tatemonoData[index].setAreaCode(tatemonocsv.get(index)[1]); 4 tatemonoData[index].setKindCode(tatemonocsv.get(index)[2]); 5 tatemonoData[index].setNorthLat(Double.parseDouble(tatemonocsv.get(index)[3]) ); 6 tatemonoData[index].setEastLong(Double.parseDouble(tatemonocsv.get(index)[4]) ); 7}

実験はしてないので間違ってたらすみません...。

投稿2019/05/11 11:43

編集2019/05/11 11:44
SST8897

総合スコア155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

techacademy の「実際に書いてみよう」に載っているプログラムを実行されましたでしょうか.
試しに CSV ファイルを書き換えて, 建物データにしてみては如何でしょう.

Java初心者すぎて

と思われているのでしたら,「実際に書いてみよう」のプログラムを少しずつ書き変えて, 試しながらご理解を進められればよいのではと思います.

投稿2019/04/27 07:45

jimbe

総合スコア12545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問