android приложение в Kotlin останавливается при нажатии на кнопку на панели действий - PullRequest
0 голосов
/ 04 февраля 2020

Это мое первое Kotlin android приложение. Я использую Android studio v3.5.3 (AndroidX)

Это рабочий процесс:

(Пуск) Main -> goto MainSvc1 ---> goto MainSelectCat ---> goto MainDisplay

SetUp для кнопки BackBat на панели действий. Я использую панель инструментов (AndroidX)

Я добавляю это в: MainSvc1, MainSelectCat, MainDisplay

 <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar"/>

В манифесте:

<activity
     android:name=".MainSvc1"
     android:screenOrientation="portrait"
     android:parentActivityName="com.example.myApp.MainActivity">

        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myApp.MainActivity"/>
</activity>

<activity
    android:name=".MainSelectCat"
    android:screenOrientation="portrait"
    android:parentActivityName="com.example.myApp.MainSvc1Activity">

      <Meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myApp.MainSvc1Activity"/>
 </activity>

, остальные будут следовать этому шаблону для MainSelectCat и MainDisplay

Когда я нажимаю backBtn в последнем действии

В Последнем действии: Деятельность MainDisplay, я добавляю следующее:

val bundle: Bundle? = intent.extras
val strUrl = bundle!!.getString("CodeId")
var ProductCode = bundle.getString("CodeName")
val strUrl : List<String> = strUrl.split("-")
var Id: Int = strUrl[0].trim().toInt()

val toolbar = findViewById(R.id.toolbar) as Toolbar?

setSupportActionBar(toolbar)

// Now get the support action bar
val actionBar = supportActionBar

// Set toolbar title/app title
actionBar!!.title = "Welcome"

Проблема:

  1. Я реализовал BackBtn в последнем действии.

    Когда я нажимаю кнопку btn на MainDisplay, чтобы вернуться к MainSelectCat

    Приложение будет иметь sh с этим сообщением: Приложение (appName) продолжает останавливаться.

  2. Если я не реализую backBtn в последнем действии, когда я возвращаюсь назад к MainSelectCat с помощью аппаратной или физической кнопки, приложение не взломает sh и будет работать нормально.

Как исправить это для (1)?

- Обновление: Я использую ADB для получения журнала (adb logcat AndroidRuntime: E *: S)

проблема заключается в: String1 будет нулевым, когда нажмите кнопку на панели действий, чтобы вернуться из MainDisplay в (2)

1) (Пуск) Main goto MainSvc1

передача данных через intent.putExtra (string1) в (2)

2) MainSelectCat

Ручка передачи (String1) из MainSvc1

Передача данных с помощью intent.putExtra (string2) в MainDisplay (3)

3) MainDisplay

проблема запускается при нажатии кнопки «Назад» на панели действий для возврата к (2)

Как исправить проблему?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Привет, я думаю, что нашел решение, используя SharePreferences для хранения данных

 private val sharedPrefFile = "kotlinsharedpreference"

val sharedPreferences: SharedPreferences = this.getSharedPreferences (sharedPrefFile, Context.MODE_PRIVATE)

var intent = intent val strCode = intent.getStringExtra ("CodeId")

if (strCode! = null) {

//- 1st time is not null, so store it
 val editor:SharedPreferences.Editor =  sharedPreferences.edit()
 editor.putString("hCode",strCode)
 editor.apply()
 editor.commit()

} else {

  val strCode2 = sharedPreferences.getString("hCode","defaultname")

}

0 голосов
/ 04 февраля 2020

Как отмечалось в комментариях, без трассировки стека мы можем просто предположить, что произошло.

Я предполагаю, что вы передаете данные между этими действиями, например, с помощью .addString, и следующее действие всегда получает эти данные, если только вы нажимают кнопку. Если нажата кнопка, предыдущее действие не передает никаких данных тому, которое появляется после кнопки, а затем происходит сбой, потому что вам это требуется в какой-то момент.

Если это так, возможно, не будет легко исправить в зависимости от того, как вы спроектировали эти действия. Если им не нужны данные, просто игнорируйте их, если они не существуют.

Если им всегда нужны данные, вам нужно подумать о другом способе их хранения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...