pirogram
@pirogram

Почему приложение вылетает после перехода на третье Activity?

Дело в том, что при создании абсолютно чистых Activity, добавив лишь кнопки, позволяющие перемещаться по экранам посредством onClick, происходит вылет при втором переходе на любой другой Activity. Ни в самой студии, не на телефоне, лог ошибки не дается - после перехода вылетает сразу.
Код MainActivity
package com.example.test

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    fun Clickcheck(view: View) {setContentView(R.layout.activity_main2)}

}

Код activity xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button2"
        android:onClick="Clickcheck"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.476"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.288" />

</androidx.constraintlayout.widget.ConstraintLayout>

В остальных Activity код аналогичный, поэтому не вижу смысла их прикреплять
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
Casper-SC
@Casper-SC
Программист (.NET)
Вообще переход на новую Activity делается по-другому. Почитай книгу Android. Программирование для профессионалов, много вопросов отпадут. Только обзаведись английской версией, чтобы смотреть в неё, когда не понятно, что имеется ввиду под некоторыми словами. И подписку на клики в XML лучше не делать. Методы именуются с маленькой буквы (camelCase).

Инструкция, как ловить исключения
Выполни по инструкции ниже всё и потом ты сможешь смотреть, какое произошло исключение, если приложение будет крашиться. Просто ставь точку останова на строке println(message) и когда сработает обработчик не перехваченного исключения, то там ты и посмотришь, что в нём написано.

Создай класс TestAppUncaughtExceptionHandler
package com.example.test

import java.lang.Thread.UncaughtExceptionHandler

class TestAppUncaughtExceptionHandler : UncaughtExceptionHandler {
	override fun uncaughtException(thread: Thread, ex: Throwable) {
		val message = "Thread name: ${thread.name}, Exception: ${ex.fillInStackTrace()}"
		// На строке ниже ставь точку останова (breakpoint) и смотри, что написано в исключении.
		println(message) 
	}
}


Создай класс TestApplication
package com.example.test

import android.app.Application

// Указывается в манифесте, чтобы работал
class TestApplication : Application() {
	override fun onCreate() {
		super.onCreate()
		
		Thread.setDefaultUncaughtExceptionHandler(TestAppUncaughtExceptionHandler())
	}
}


В AndroidManifest.xml файл добавь android:name=".TestApplication"

Пример AndroidManifest.xml (многое удалено для краткости)
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.example.test"
	xmlns:android="http://schemas.android.com/apk/res/android">

	<application
		android:name=".TestApplication">
		<activity
                   ...
		</activity>
	</application>

</manifest>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы