回答編集履歴
1
コメントを受けて追記
answer
CHANGED
@@ -24,4 +24,75 @@
|
|
24
24
|
; // 色々
|
25
25
|
}
|
26
26
|
}
|
27
|
-
```
|
27
|
+
```
|
28
|
+
---
|
29
|
+
**回答後のコメントを受けて追記しました:2019-11-12 16:46**
|
30
|
+
|
31
|
+
基本的には`MainActivity`の`public`で`static`なメソッドを使う、と言う方針のままです。その内インスタンス変数やメソッドに関わる部分を切り出し、リソースIDを引数とするものと、`InputStream`を引数とするものとに分けます。
|
32
|
+
```Java
|
33
|
+
/**
|
34
|
+
* csvReadインスタンスメソッド版
|
35
|
+
* @param filenameId リソースID
|
36
|
+
* @return
|
37
|
+
*/
|
38
|
+
public ArrayList csvRead(int filenameId) {
|
39
|
+
InputStream is = getResources().openRawResource(filenameId);
|
40
|
+
ArrayList arrays = csvRead(is);
|
41
|
+
return arrays;
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* csvReadクラスメソッド版
|
46
|
+
* @param is InputStream
|
47
|
+
* @return
|
48
|
+
*/
|
49
|
+
public static ArrayList csvRead(InputStream is) {
|
50
|
+
ArrayList<ArrayList<String>> arrays = new ArrayList<>();
|
51
|
+
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
|
52
|
+
String line;
|
53
|
+
try {
|
54
|
+
while ((line = reader.readLine()) != null) {
|
55
|
+
//カンマ区切りで1つづつ配列に入れる
|
56
|
+
ArrayList<String> array = new ArrayList<>();
|
57
|
+
String[] RowData = line.split(",");
|
58
|
+
for (int j = 0; j < RowData.length; j++) {
|
59
|
+
array.add(RowData[j]);
|
60
|
+
}
|
61
|
+
arrays.add(array);
|
62
|
+
//Log.d("array1",""+array+"");
|
63
|
+
}
|
64
|
+
//Log.d("array2",""+arrays+"");
|
65
|
+
reader.close();
|
66
|
+
} catch (IOException e) {
|
67
|
+
e.printStackTrace();
|
68
|
+
}
|
69
|
+
return arrays;
|
70
|
+
}
|
71
|
+
```
|
72
|
+
|
73
|
+
これを`AllEvacMapsActivity`から呼び出すときは、
|
74
|
+
```Java
|
75
|
+
// 問題の部分。
|
76
|
+
// MainActivity.csvReadクラスメソッド版を呼び出す。
|
77
|
+
// ファイルリソースからのInputStreamは自力で取得する
|
78
|
+
InputStream is = getResources().openRawResource(R.raw.datafile);
|
79
|
+
ArrayList arrayList = MainActivity.csvRead(is);
|
80
|
+
|
81
|
+
//for文でaddMarkerをする予定
|
82
|
+
for (int i = 0; i < arrayList.size(); i++) {
|
83
|
+
;
|
84
|
+
}
|
85
|
+
|
86
|
+
```
|
87
|
+
のようにします。
|
88
|
+
|
89
|
+
尚、以下のようにするとコンパイル自体はできますが、**まともに動かないので、やってはいけません。**Activityの生成は、
|
90
|
+
Androidシステムに任せなければなりません。
|
91
|
+
```Java
|
92
|
+
// やってはいけない!!
|
93
|
+
MainActivity mainActivity = new MainActivity();
|
94
|
+
arrayList = mainActivity.csvRead(R.raw.datafile);
|
95
|
+
|
96
|
+
```
|
97
|
+
|
98
|
+
`Application`クラスを経由して複数のActivity間でメソッドや変数を参照できるようにする方法もありますが、今回のケースでは過剰スペックだと思います。まずはJavaのメソッドの取り扱いで何とかするのをお勧めします。更に、`MainActivity`クラスに`csvRead`メソッドを持たせるのではなく、それ用のクラスを別に設けてそちらに任せてしまうようにするのも、設計面で考えるとより適切かもしれません。
|