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

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

ただいまの
回答率

90.53%

  • Java

    13752questions

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

  • Android

    6507questions

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

  • Android Studio

    3690questions

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

  • Kotlin

    317questions

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

起動時に強制終了してしまう

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 245

sena14

score 51

アプリを開こうとすると強制終了してしまい困っています。

ストアからダウンロードして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
    }

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mts10806

    2018/05/31 06:20

    「android7.0以前の端末」ではどうなるのでしょうか

    キャンセル

  • sena14

    2018/05/31 14:43

    手元にある端末二つでしか確認できていませんが強制終了せずに起動できます

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13752questions

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

  • Android

    6507questions

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

  • Android Studio

    3690questions

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

  • Kotlin

    317questions

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