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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1078閲覧

オブジェクトを保存する方法

sena14

総合スコア109

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

1クリップ

投稿2018/05/16 17:39

ゲームを作っていてデータの保存を下記のような感じで考えているのですが
自分の想定だと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) { } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

SecondActivityでそもそもsaveDataが宣言されていないので、ビルドも通らないと思うのですがmyDataと並んでlateinitで宣言していると仮定して回答します。

lateinit はその変数の値を参照する処理になるまでに初期化されていると約束して宣言するものです。
ここでの参照する処理はsaveData.myDataであり、その際にsaveDataに対して一度も代入が行われていないために例外が発生しています。
saveDataに値が代入されていない理由を調査すべきです。
おそらくloadSaveData内で例外が発生して初期化されていないのだと考えます。
例外処理のcatch文では必ず例外処理を実装したほうが良いです。ログ出力なども仕込みましょう。

投稿2018/05/17 14:32

nakasho_dev

総合スコア2655

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問