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

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

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

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

Kotlin

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

Q&A

解決済

2回答

1952閲覧

Kotlinで作ったAndroidアプリが落ちる

matsumo2002

総合スコア11

Android

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

Kotlin

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

0グッド

0クリップ

投稿2019/06/11 14:17

編集2019/06/11 15:39

##問題
作成したメモアプリが唐突に落ちます。
メモを保存してHOMEに帰ってきたとき(MainActivityに復帰したとき)落ちることが多いです。
アプリを再起動して同じ操作をもう一度行うと、上手く行ったり、また他のところで落ちてしまったりと、不安定な状態です。
どのタイミングで落ちるのかわからないので、どこがおかしいのかわからず、手も足も出ません...。
下にコードを載せますので、おかしいところをご指摘していただけるとありがたいです。
##参考にしたサイト
ここのサイトを参考に作っています。データの保存に関しては自分でやってみたかったので、自分で実装しています。ここが怪しいかもしれません。
##コード
MainActivity.kt

Kotlin

1package com.example.simplememo 2 3import android.content.DialogInterface 4import android.content.Intent 5import android.support.v7.app.AppCompatActivity 6import android.os.Bundle 7import android.support.v7.app.AlertDialog 8import android.widget.ArrayAdapter 9import android.widget.Toast 10import kotlinx.android.synthetic.main.activity_main.* 11import java.io.BufferedReader 12import java.io.File 13import java.io.IOException 14 15class MainActivity : AppCompatActivity() { 16 17 override fun onCreate(savedInstanceState: Bundle?) { 18 super.onCreate(savedInstanceState) 19 setContentView(R.layout.activity_main) 20 21 var map = StartUp() 22 23 HomeMemoList.setOnItemClickListener { parent, view, position, id -> 24 map = StartUp() 25 26 var Title = map[position+1] 27 Toast.makeText(this,"編集:${Title}",Toast.LENGTH_SHORT).show() 28 29 val intent= Intent(this,CreateMemoActivity::class.java) 30 intent.putExtra("Title",Title) 31 startActivity(intent) 32 } 33 34 HomeMemoList.setOnItemLongClickListener { parent, view, position, id -> 35 var Title = map[position+1] 36 AlertDialog.Builder(this) 37 .setTitle("削除") 38 .setMessage("このメモを削除しますか?") 39 .setPositiveButton("はい",DialogInterface.OnClickListener { dialog, which -> 40 try { 41 val del = File(Title) 42 del.delete() 43 CountDownFile() 44 Toast.makeText(this,"${Title}を削除しました",Toast.LENGTH_SHORT).show() 45 map = StartUp() 46 } 47 catch (e:IOException){ 48 Toast.makeText(this,"ERROR:${Title}を削除できません\n${e}",Toast.LENGTH_SHORT).show() 49 map = StartUp() 50 } 51 }) 52 .setNegativeButton("いいえ",null) 53 .show() 54 return@setOnItemLongClickListener true 55 } 56 57 NewCreateButton.setOnClickListener { 58 val intent= Intent(this,CreateMemoActivity::class.java) 59 intent.putExtra("Title","新しいメモ") 60 startActivity(intent) 61 } 62 } 63 64 override fun onResume() { 65 super.onResume() 66 67 StartUp() 68 } 69 70 fun CountMemo():Int{ 71 val readFile = File(applicationContext.filesDir,"SimpleMemoCount.txt") 72 var count:Int 73 if(readFile.exists()){ 74 count=readFile.bufferedReader().use(BufferedReader::read) 75 } 76 else count=0 77 return count 78 } 79 80 fun CountAllMemo():Int{ 81 val readFile = File(applicationContext.filesDir,"SimpleMemoAllCount.txt") 82 var count:Int 83 if(readFile.exists()){ 84 count=readFile.bufferedReader().use(BufferedReader::read) 85 } 86 else count=0 87 return count 88 } 89 90 fun CountDownFile() { 91 val file="SimpleMemoCount.txt" 92 var Count:Int 93 val readFile= File(applicationContext.filesDir, file) 94 95 if(readFile.exists()) { 96 Count=readFile.bufferedReader().use(BufferedReader::read) 97 Count-=1 98 } 99 else Count=1 100 101 File(applicationContext.filesDir,file).writer().use{ 102 it.write(Count) 103 } 104 } 105 106 fun StartUp():Map<Int,String>{ 107 val count = CountMemo() 108 val allcount = CountAllMemo() 109 var memobody: ArrayList<String?> = arrayListOf() 110 var Title:String 111 var map= mapOf<Int,String>() 112 val mutable=map.toMutableMap() 113 114 if(count!=0){ 115 var flag=0 116 for(i in 0..allcount){ 117 Title = "SimpleMemo" + (i+1) + ".txt" 118 val readFile=File(application.filesDir,Title) 119 if(readFile.exists()){ 120 memobody.add(readFile.bufferedReader().use(BufferedReader::readText)) 121 flag++ 122 mutable += flag to Title 123 } 124 } 125 } 126 127 val adapter=ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,memobody) 128 HomeMemoList.adapter=adapter 129 130 return mutable 131 } 132} 133

CreateMemoActivity.kt

Kotlin

1package com.example.simplememo 2 3import android.support.v7.app.AppCompatActivity 4import android.os.Bundle 5import android.support.v7.app.AlertDialog 6import android.view.MenuItem 7import android.widget.TextView 8import android.widget.Toast 9import kotlinx.android.synthetic.main.activity_create_memo.* 10import java.io.BufferedReader 11import java.io.File 12 13class CreateMemoActivity : AppCompatActivity() { 14 15 override fun onCreate(savedInstanceState: Bundle?) { 16 super.onCreate(savedInstanceState) 17 setContentView(R.layout.activity_create_memo) 18 19 var Title:String=intent.getStringExtra("Title") 20 21 if(Title!="新しいメモ")LordMemo(Title) 22 23 supportActionBar?.setDisplayHomeAsUpEnabled(true) 24 supportActionBar?.title=Title 25 26 register.setOnClickListener { 27 if(Title=="新しいメモ")Title = CountUpFile() 28 File(applicationContext.filesDir,Title).writer().use{ 29 it.write(body.text.toString()) 30 } 31 Toast.makeText(applicationContext,"${Title}を保存しました",Toast.LENGTH_SHORT).show() 32 finish() 33 } 34 } 35 36 override fun onOptionsItemSelected(item: MenuItem?): Boolean { 37 when(item?.itemId){ 38 android.R.id.home->finish() 39 else -> { 40 return super.onOptionsItemSelected(item) 41 } 42 } 43 return true 44 } 45 46 fun CountUpFile(): String { 47 val file="SimpleMemoCount.txt" 48 var Count:Int 49 val readFile= File(applicationContext.filesDir, file) 50 51 if(readFile.exists()) { 52 Count=readFile.bufferedReader().use(BufferedReader::read) 53 Count+=1 54 } 55 else Count=1 56 57 File(applicationContext.filesDir,file).writer().use{ 58 it.write(Count) 59 } 60 61 val file2="SimpleMemoAllCount.txt" 62 var Count2:Int 63 val readFile2= File(applicationContext.filesDir, file2) 64 65 if(readFile2.exists()) { 66 Count2=readFile2.bufferedReader().use(BufferedReader::read) 67 Count2+=1 68 } 69 else Count2=1 70 71 File(applicationContext.filesDir,file2).writer().use{ 72 it.write(Count2) 73 } 74 75 return "SimpleMemo"+Count2+".txt" 76 } 77 78 fun LordMemo(Title:String){ 79 val readFile=File(applicationContext.filesDir,Title) 80 if(readFile.exists()){ 81 var text=readFile.bufferedReader().use(BufferedReader::readText) 82 body.setText(text, TextView.BufferType.NORMAL) 83 } 84 else { 85 AlertDialog.Builder(this) 86 .setTitle("読み込みエラー") 87 .setMessage("指定されたファイルが見つかりませんでした\nMemo:${Title}") 88 .setPositiveButton("OK",null) 89 .show() 90 finish() 91 } 92 } 93}

##エラーログ(追記)

2019-06-12 00:35:16.647 5223-5223/com.example.simplememo E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.simplememo, PID: 5223 java.lang.NullPointerException at java.io.File.<init>(File.java:282) at com.example.simplememo.MainActivity$onCreate$2$1.onClick(MainActivity.kt:41) at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:251) at android.app.ActivityThread.main(ActivityThread.java:6589) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

MainActivity.kt:41はval del = File(Title)の部分でした

回答よろしくおねがいします

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/06/11 14:34

落ちるってことはエラーログが出てますよね。それも載せた方が回答つきますよ。
matsumo2002

2019/06/11 15:39

指摘ありがとうございます。 エラーを追記しました
Akashic

2019/06/11 19:17

なんどか動かしてみましたが、再現できませんでした。 レイアウトのXMLも貼ってもらえますか? あと、初期化(キャッシュを消して、登録されているファイルが無い状態)から、発生時までの操作も詳しく書いてもらえますか(毎回発生ではないとのことなので、難しいかもしれませんが..)
退会済みユーザー

退会済みユーザー

2019/06/12 04:05

NullPointerExceptionならif(Title == null)returnとか入れればとりあえず落ちなくなりそうですね。Titleがnullになっていることがまずいならだめですが。
guest

回答2

0

やってみたのですが、解決しないですね。。

投稿2021/12/16 02:47

konn_

総合スコア28

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

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

0

自己解決

回答者様の言うとおりにすれば治りました

投稿2019/10/07 09:17

matsumo2002

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問