2017-09-23 6 views
0

私がやっていることは、ファイル "turma.dat"がすでに存在するかどうかをテストしています。もしそれが存在すればそれを開きます。もし存在しなければ、ファイルを保存してください。初めてアプリケーションを起動するときにファイルを作成しますが、ファイルを再び起動するたびにファイルが白で作成されます。メインアクティビティのonCreateにファイルをロードしようとしています

MainActivity:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 
    val toolbar = findViewById(R.id.toolbar) as Toolbar 
    setSupportActionBar(toolbar) 

    var turma : Turma 
    var file = File("turma.dat") 

    if(file.exists()) { 
     turma = this.abrirArquivo() 
    }else{ 
     turma = Turma() 
     ArquivoUtils(turma, this.applicationContext) 
    } 

方法abrirArquivo:

@Throws(IOException::class, ClassNotFoundException::class) 
fun abrirArquivo(): Turma { 

    val fis = this.applicationContext.openFileInput("turma.dat") 
    val ois = ObjectInputStream(fis) 

    return ois.readObject() as Turma 
} 

クラスArquivoUtils:

class ArquivoUtils internal constructor(var turminha: Turma, var context : Context) { 
internal val fos = this.context.openFileOutput("turma.dat", Context.MODE_PRIVATE) 
internal val oos = ObjectOutputStream(fos) 

init { 
    this.salvarArquivo() 
    this.closeFile() 
} 

@Throws(IOException::class) 
private fun salvarArquivo() { 
    oos.writeObject(turminha) 
    this.closeFile() 
} 

@Throws(IOException::class) 
fun closeFile() { 
    oos.close() 
} 
+0

「ホワイトで作成された」とはどういう意味ですか? – Les

+0

ファイルが空です。 –

+0

だから 'File.exists(" turma.dat ")'がtrueを返しますか?あなたはデバッガでコードを踏んできましたか? – Les

答えて

0

file.exists()がprobalbyある(Turmaオブジェクトがファイルに追加し、保存し受信するための責任者)あなたが期待する場所を見ていない。メソッドopenFileInputopenFileOutputは、アプリケーションのプライベートロケーションのファイルに対して機能します。あなたは、ファイルを宣言するときにあなたが言う...

var file = File("turma.dat") 

が代わりに何かのように使用している場合に役立ちます...

var file = File(this.filesDir, "turma.dat") 

を参照してください。 Saving Filesを読んで、Androidlでファイルを操作する方法をよく理解してください

ちなみに、デバッガを使用してステップスルーし、file.existsが期待通りの結果を返すことを確認してください。 (デバッガの使い方がわからない場合は、どのように学習すればよいのでしょうか?)

+0

あなたが言った変更を適用しようとしましたが、今、アプリを開こうとするとクラッシュします。 –

+0

これはおそらく進歩です。例外は何ですか? try/catchブロックにコードをラップして例外を出力することができます。 – Les

+0

致命的な例外:メイン プロセス:com.example.thial.estudandokotlin、PID:10306 java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.example.thial.estudandokotlin/com.example.thial.estudandokotlin.MainActivity} :java.io.EOFException –

関連する問題