アプリを開こうとすると強制終了してしまい困っています。
ストアからダウンロードしてandroid7.0以前の端末で試したり、8.0の端末でUSBデバッグをした際は起動するのですが、ストアからダウンロードして8.0で開こうとすると強制終了してしまいます。playConsoleの情報を見る限り起動時データベースを読み込むところでillegalstateexceptionでクラッシュしているようです。
USBデバッグだと強制終了しなかったりと何が原因なのかつかめない状態でいます。
どんな原因なのか教えていただきたいです。
下に起動時のアクティビティを載せておきます。
他に必要なものがあれば教えてください。
よろしくお願いします。
追記
SQLMyWritableのloadを呼ぶと強制終了してしまうことからinitLoad()として一部に減らしてみたところ強制終了が防げました。
処理が多すぎて強制終了してしまうということなのでしょうか?
どのように変更すれば対応できますでしょうか?よろしくお願いします。
更に確認したところ
saveData.winTimes = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.WIN_TIMES))
の行でillegalstateexceptionが発生しているようです。
エラーメッセージを追加しました
8.0でも起動できる機種起動できない機種があることが分かりました
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2917)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2978)
at android.app.ActivityThread.-wrap14 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1628)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6646)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358)
Caused by: java.lang.IllegalStateException:
at android.database.CursorWindow.nativeGetLong (Native Method)
at android.database.CursorWindow.getLong (CursorWindow.java:524)
at android.database.CursorWindow.getInt (CursorWindow.java:591)
at android.database.AbstractWindowedCursor.getInt (AbstractWindowedCursor.java:69)
at pakcage.SQLMyWritable.load (SQLMyWritable.kt:59)
at pakcage.TitleActivity.loadSaveData (TitleActivity.kt:67)
at pakcage.TitleActivity.onCreate (TitleActivity.kt:24)
at android.app.Activity.performCreate (Activity.java:6912)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2870)
import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Button import android.widget.EditText import android.widget.Toast class TitleActivity : AppCompatActivity() { lateinit var saveData: SaveData lateinit var myBgm: MyBgm lateinit var mAdView : AdView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.title) loadSaveData() myBgm = MyBgm(this) this.myBgm.start3() } //ゲームスタート fun gameStart(view: View) { if (!saveData.eventData.initEvent) { /*イベント開始*/ setContentView(R.layout.input_name) } else { val intent = Intent(this@TitleActivity, MainActivity::class.java) startActivity(intent) finish() } } //セーブ fun dataSave() { val sqlMyWritable = SQLMyWritable(this) sqlMyWritable.save(saveData) } //セーブデータ読み込み fun loadSaveData() { val sqlMyWritable = SQLMyWritable(this) saveData = sqlMyWritable.load() } }
import android.content.ContentValues import android.content.Context import android.database.Cursor class SQLMyWritable(val context: Context) { fun initLoad(): SaveData { val openHelper = SQLMyOpenHelper(context) val database = openHelper.getWritableDatabase() var cursor: Cursor? = null cursor = database.query( SQLMyContract.SaveData.TABLE_NAME, null, null, null, null, null, null, null ) val saveData = SaveData() cursor.moveToFirst() saveData.myCharacter.Name = cursor.getString(cursor.getColumnIndex(SQLMyContract.SaveData.MY_NAME)) saveData.eventData.initEvent = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.INITEVENT))) return saveData } //読み込み fun load(): SaveData { val openHelper = SQLMyOpenHelper(context) val database = openHelper.getWritableDatabase() var cursor: Cursor? = null cursor = database.query( SQLMyContract.SaveData.TABLE_NAME, null, null, null, null, null, null, null ) val saveData = SaveData() cursor.moveToFirst() saveData.myCharacter.Name = cursor.getString(cursor.getColumnIndex(SQLMyContract.SaveData.MY_NAME)) saveData.myCharacter.HP = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_HP)) saveData.myCharacter.MaxHP = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_MAX_HP)) saveData.myCharacter.MP = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_MP)) saveData.myCharacter.MaxMP = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_MAX_MP)) saveData.myCharacter.STR = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_STR)) saveData.myCharacter.DEF = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_DEF)) saveData.myCharacter.AGI = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_AGI)) saveData.myCharacter.INT = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_INT)) saveData.myCharacter.EXP = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_EXP)) saveData.myCharacter.theEXP = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_THE_EXP)) saveData.myCharacter.EXP_BONUS = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MY_EXP_BONUS)) saveData.eventData.boss1 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS1))) saveData.eventData.boss2 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS2))) saveData.eventData.boss3 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS3))) saveData.eventData.boss4 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS4))) saveData.eventData.boss5 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS5))) saveData.eventData.boss6 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS6))) saveData.eventData.boss7 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS7))) saveData.eventData.boss8 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS8))) saveData.eventData.boss9 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS9))) saveData.eventData.boss10 = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.BOSS10))) saveData.eventData.initEvent = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.INITEVENT))) saveData.floor = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.NOW_FLOOR)) saveData.isBattle = returnBoolean(cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.IS_BATTLE))) saveData.enemyHP = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.ENEMY_HP)) saveData.enemyNo = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.ENEMY_NO)) saveData.maxFloor = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.MAX_FLOOR)) saveData.startFloor = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.START_FLOOR)) saveData.winTimes = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.WIN_TIMES)) saveData.escapeTimes = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.ESCAPE_TIMES)) saveData.gameOverTimes = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.GAME_OVER_TIMES)) saveData.EXP = cursor.getInt(cursor.getColumnIndex(SQLMyContract.SaveData.EXP)) database.close() cursor.close() return saveData } fun returnBoolean(i: Int): Boolean { var b = false when (i) { 0 -> b = false 1 -> b = true } return b } }
あなたの回答
tips
プレビュー