前回までの状況はこちら。
最新ソースはこちら(gitHub)
https://github.com/takishita2nd/AroundHokkaido
今回はGPSの情報から取得した移動距離合計をファイルに保存する処理を作成していきます。
クラスを一つ作成し、北海道一周関連の処理はこのクラスの中で処理していきたいと思います。
package com.takilab.aroundhokkaido
import java.io.File
class AroundHokkaido {
private val filename: String = "distance.txt"
private val citylist: CityList = CityList()
private var totalDistance: Double = 0.0
private val activity: MainActivity = SingletonActivity.GetActivity()
fun getDistance(): Double{
val file = File(activity.filesDir, filename)
if(file.exists()){
totalDistance = file.readText().toDouble()
}
return totalDistance
}
fun updateDistance(distance: Double): Double {
val file = File(activity.filesDir, filename)
if(file.exists()){
totalDistance = file.readText().toDouble()
}
totalDistance += distance
file.writeText("%.3f".format(totalDistance))
return totalDistance
}
}
まず、Android内でファイルアクセスするためには、MainActivityが必要です。
exists()でファイルの存在の有無を確認し、存在していれば、ファイルに保存済みのデータを読み込みます。
ファイルはテキストで保存されているので、Double型に変換して取得します。
保存するときは、桁数を指定しないと、指数表記でテキスト保存されてDouble型に変換出来ないという問題があるので、桁数を絞っています。
これをMainActivityでUIに表示させます。
private lateinit var aroundHokkaido: AroundHokkaido
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
SingletonActivity.SetActivity(this);
aroundHokkaido = AroundHokkaido()
val distance: Double = aroundHokkaido.getDistance()
distanceText.text = "%.3f".format(distance)
requestPermission()
~中略~
override fun onResponse(call: Call, response: Response) {
var str = response!!.body!!.string()
val jsonObject = JSONObject(str)
val jsonArray = jsonObject.getJSONArray("Feature")
for (i in 0 until jsonArray.length()) {
val jsonData = jsonArray.getJSONObject(i)
val geometry = jsonData.getJSONObject("Geometry")
val distance = geometry.getDouble("Distance")
val totalDistance: Double = aroundHokkaido.updateDistance(distance)
val mainHandler : Handler = Handler(Looper.getMainLooper())
mainHandler.post(Runnable {
distanceText.text = "%.3f".format(totalDistance)
})
}
}
まず、AroundHokkaido()の中でMainActivityを使用していますので、AroundHokkaidoの初期化はSingletonActivity.SetActivity(this);の後に行わなければなりません。
で、AroundHokkaidoから現在の移動距離を取得しUIに表示します。
これがアプリ立ち上げたときの初期表示値です。
WebAPIのレスポンスを取得したときの処理も同様にします。