ゲームを作っていてデータの保存を下記のような感じで考えているのですが
自分の想定だとMainでデータを読み込む→もしデータがなければ作る(初回起動時)Secondに遷移したときにMainで作ったSaveDataを読み込む→何かしらの変更がありdataSave()を呼び保存する。
みたいな感じで考えているのですがSecondActivityのmyData = saveData.myDataの箇所でlateinit property saveData has not been initializedとエラーが出てしまいます。
loadSaveData()でcatchのほうが呼ばれてしまっているみたいです。
どこが問題なのでしょうか?それともそもそもの理解が違っているのでしょうか?
よろしくお願いします。
import java.io.Serializable class SaveData:Serializable { var myData = MyData() var nemyData= null }
import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import java.io.FileInputStream import java.io.FileOutputStream import java.io.ObjectInputStream import java.io.ObjectOutputStream class MainActivity : AppCompatActivity() { lateinit var saveData: SaveData override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) loadSaveData() } //SecondActivityへ fun goDungeon(view: View){ val intent = Intent(this@MainActivity,SecondActivity::class.java) startActivity(intent) } //セーブデータ作成 fun createSaveData(){ saveData = SaveData() try { val fileOutputStream = FileOutputStream("SaveData.dat") val objectOutputStream = ObjectOutputStream(fileOutputStream) objectOutputStream.writeObject(saveData) objectOutputStream.close() fileOutputStream.close() }catch (exception:Exception){ } } //セーブデータ読み込み fun loadSaveData(){ try { val fileInputStream = FileInputStream("SaveData.dat") val objectInputStream = ObjectInputStream(fileInputStream) saveData = objectInputStream.readObject() as SaveData objectInputStream.close() fileInputStream.close() }catch (exception:Exception){ createSaveData() } } }
import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.TextView import java.io.FileInputStream import java.io.FileOutputStream import java.io.ObjectInputStream import java.io.ObjectOutputStream import java.util.* class SecondActivity : AppCompatActivity() { lateinit var myData : MyData override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_game) loadSaveData() myData = saveData.myData } //セーブデータ更新 fun dataSave() { try { val fileOutputStream = FileOutputStream("SaveData.dat") val objectOutputStream = ObjectOutputStream(fileOutputStream) objectOutputStream.writeObject(saveData) objectOutputStream.close() fileOutputStream.close() } catch (exception: Exception) { } } //セーブデータ読み込み fun loadSaveData() { try { val fileInputStream = FileInputStream("SaveData.dat") val objectInputStream = ObjectInputStream(fileInputStream) saveData = objectInputStream.readObject() as SaveData objectInputStream.close() fileInputStream.close() } catch (exception: Exception) { } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。