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

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

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

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

Kotlin

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

Q&A

解決済

1回答

2706閲覧

Kotlinで開発したアプリが落ちる

matsumo2002

総合スコア11

Android

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

Kotlin

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

0グッド

0クリップ

投稿2019/06/10 17:39

###実現したいこと
ここのサイトを参考にメモアプリを作りたいです。
データの保存に関しては自分のわかりやすいやり方でやりたかったので、このサイトを参考に実装しました。リストビューに関しては、ここのサイト参考にしています。

ある程度コードは書けて、MAINのアクティビティで表示するメモの一覧(List)を作っていました。以下のMainActivityのコードなのですが、コンパイルは通るものの、以下のようなエラーが出て落ちてしまいます。

Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

MainActivityではtoString()は使っていませんし、2つ目のアクティビティ(メモの新規作成)では一回だけ使っていますが、それもボタンを押さないとそのアクティビティに移動することはありません。なので、どのように解決したらいいのかわからず、手も足も出ない状態です...。

このエラーの前はmemobody[i] = readFile.bufferedReader().use(BufferedReader::readText)の部分でメモリのアクセス違反があったのですが、なにか関係しているのでしょうか?

どのようにすれば解決できるでしょうか。

###コード
MainActivity.kt

Kotlin

1package com.example.simplememo 2 3import android.content.Intent 4import android.support.v7.app.AppCompatActivity 5import android.os.Bundle 6import android.widget.ArrayAdapter 7import kotlinx.android.synthetic.main.activity_main.* 8import java.io.BufferedReader 9import java.io.File 10 11class MainActivity : AppCompatActivity() { 12 13 override fun onCreate(savedInstanceState: Bundle?) { 14 super.onCreate(savedInstanceState) 15 setContentView(R.layout.activity_main) 16 17 val count = CountMemo() 18 var memobody: Array<String?> = arrayOfNulls(count) 19 20 if(count!=0){ 21 for(i in memobody.indices){ 22 var Title = "SimpleMemo" + i+1 + ".txt" 23 val readFile=File(application.filesDir,Title) 24 if(readFile.exists()){ 25 memobody[i] = readFile.bufferedReader().use(BufferedReader::readText) 26 } 27 } 28 } 29 30 val adapter=ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,memobody) 31 HomeMemoList.adapter=adapter 32 33 NewCreateButton.setOnClickListener { 34 val intent= Intent(this,CreateMemoActivity::class.java) 35 startActivity(intent) 36 } 37 } 38 39 fun CountMemo():Int{ 40 val readFile = File(applicationContext.filesDir,"SimpleMemoCount.txt") 41 var count:Int 42 if(readFile.exists()){ 43 count=readFile.bufferedReader().use(BufferedReader::read) 44 } 45 else count=0 46 return count 47 } 48}

CreateMemoActivity.kt

Kotlin

1package com.example.simplememo 2 3import android.support.v7.app.AppCompatActivity 4import android.os.Bundle 5import android.widget.Toast 6import kotlinx.android.synthetic.main.activity_create_memo.* 7import java.io.BufferedReader 8import java.io.File 9 10class CreateMemoActivity : AppCompatActivity() { 11 12 override fun onCreate(savedInstanceState: Bundle?) { 13 super.onCreate(savedInstanceState) 14 setContentView(R.layout.activity_create_memo) 15 16 register.setOnClickListener { 17 var Title = CountUpFile() 18 File(applicationContext.filesDir,Title).writer().use{ 19 it.write(body.text.toString()) 20 } 21 Toast.makeText(applicationContext,"${Title}を保存しました",Toast.LENGTH_SHORT).show() 22 } 23 24 back.setOnClickListener { 25 finish() 26 } 27 } 28 29 fun CountUpFile(): String { 30 val file="SimpleMemoCount.txt" 31 var Count:Int 32 val readFile= File(applicationContext.filesDir, file) 33 34 if(readFile.exists()) { 35 Count=readFile.bufferedReader().use(BufferedReader::readText) as Int 36 Count+=1 37 } 38 else Count=1 39 40 File(applicationContext.filesDir,file).writer().use{ 41 it.write(Count) 42 } 43 44 return "SimpleMemo"+Count+".txt" 45 } 46}

activity_main.xml

XML

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:app="http://schemas.android.com/apk/res-auto" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:orientation="vertical" 9 tools:context=".MainActivity"> 10 11 <ListView 12 android:id="@+id/HomeMemoList" 13 android:layout_width="match_parent" 14 android:layout_height="wrap_content" 15 android:layout_weight="9" /> 16 17 <Button 18 android:id="@+id/NewCreateButton" 19 android:layout_width="match_parent" 20 android:layout_height="wrap_content" 21 android:layout_weight="1" 22 android:text="新規作成" /> 23 24</LinearLayout>

activity_create_memo.xml

XML

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:app="http://schemas.android.com/apk/res-auto" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:orientation="vertical" 9 tools:context=".CreateMemoActivity"> 10 11 <EditText 12 android:id="@+id/body" 13 android:layout_width="match_parent" 14 android:layout_height="wrap_content" 15 android:textSize="20sp" 16 android:inputType="textMultiLine" 17 android:lines="50" 18 android:layout_weight="9" 19 android:gravity="top|left" /> 20 21 <LinearLayout 22 android:layout_width="match_parent" 23 android:layout_height="wrap_content" 24 android:orientation="horizontal" 25 android:layout_weight="1"> 26 27 <Button 28 android:id="@+id/register" 29 android:layout_width="match_parent" 30 android:layout_height="wrap_content" 31 android:text="登録" 32 android:layout_weight="1" /> 33 34 <Button 35 android:id="@+id/back" 36 android:layout_width="match_parent" 37 android:layout_height="wrap_content" 38 android:text="戻る" 39 android:layout_weight="1" /> 40 </LinearLayout> 41 42</LinearLayout>

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえず該当のエラーだけですと、現状だとSimpleMemo01.txt のようになっているようなので、

var Title = "SimpleMemo" + i+1 + ".txt"

var Title = "SimpleMemo" + (i+1) + ".txt"

にすれば避けれそうです。

投稿2019/06/10 21:35

Akashic

総合スコア298

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問