Android: la aplicación falla al iniciarse "Appname sigue deteniéndose". ClassNotFoundException e InflateException

CorePress2024-01-25  10

ingrese la descripción de la imagen aquí. Soy nuevo en programación y revisé todas las preguntas que pude, pero no encontré una solución que funcione para mi problema :(

Cada vez que inicio una aplicación, inmediatamente falla y aparece el mensaje "El nombre de la aplicación sigue deteniéndose". Obtuve ClassNotFoundException e InflateException, todas las dependencias en gradle están instaladas correctamente, la ruta al archivo también es correcta (al menos eso creo). Es un proyecto educativo, parte del mismo fue predescargado. Hay una única actividad con un solo fragmento, que debería estar activa al iniciar la aplicación.

Capturas de pantalla con la ruta actual:

1

2

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.unscramble, PID: 7717
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.unscramble/com.example.android.unscramble.MainActivity}: android.view.InflateException: Binary XML file line #25: Binary XML file line #25: Error inflating class androidx.fragment.app.FragmentContainerView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: android.view.InflateException: Binary XML file line #25: Binary XML file line #25: Error inflating class androidx.fragment.app.FragmentContainerView
     Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class androidx.fragment.app.FragmentContainerView
     Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.android.unscramble.ui.game.GameFragment: make sure class name exists
        at androidx.fragment.app.FragmentFactory.loadFragmentClass(FragmentFactory.java:97)
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:611)
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
        at androidx.fragment.app.FragmentManager.instantiate(FragmentManager.java:483)
        at androidx.fragment.app.FragmentContainerView.<init>(FragmentContainerView.java:171)
        at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:52)
        at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
        at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:319)
        at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:298)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
        at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:302)
        at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:273)
        at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:115)
        at com.example.android.unscramble.MainActivity.onCreate(MainActivity.kt:28)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.ClassNotFoundException: com.example.android.unscramble.ui.game.GameFragment
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:453)
        at androidx.fragment.app.FragmentFactory.loadClass(FragmentFactory.java:53)
        at androidx.fragment.app.FragmentFactory.loadFragmentClass(FragmentFactory.java:94)
            ... 34 more
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.android.unscramble.ui.game.GameFragment" on path: DexPathList[[zip file "/data/app/com.example.android.unscramble-SMPtJZpeKsSBNf3fCMLZeg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.android.unscramble-SMPtJZpeKsSBNf3fCMLZeg==/lib/x86, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            ... 38 more

La única línea que me parece rara es ésta. Sin embargo, no sé qué hacer con él.

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.android.unscramble.ui.game.GameFragment" on path: DexPathList[[zip file "/data/app/com.example.android.unscramble-SMPtJZpeKsSBNf3fCMLZeg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.android.unscramble-SMPtJZpeKsSBNf3fCMLZeg==/lib/x86, /system/lib, /vendor/lib]]

Aquí hay fragmentos de código:

JuegoFragment.kt

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.example.android.unscramble.R
import com.example.android.unscramble.databinding.GameFragmentBinding
import com.example.android.unscramble.ui.game.MAX_NO_OF_WORDS
import com.example.android.unscramble.ui.game.allWordsList
import com.google.android.material.dialog.MaterialAlertDialogBuilder

class GameFragment : Fragment(R.layout.game_fragment) {
    
    private val viewModel: GameViewModel by viewModels()

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        // Inflate the layout XML file and return a binding object instance
        binding = GameFragmentBinding.inflate(inflater, container, false)
        Log.d("GameFragment", "GameFragment created/re-created!")
        Log.d("GameFragment", "Word: ${viewModel.currentScrambledWord} " +
                "Score: ${viewModel.score} WordCount: ${viewModel.currentWordCount}")
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

       
        binding.submit.setOnClickListener { onSubmitWord() }
        binding.skip.setOnClickListener { onSkipWord() }
      
        updateNextWordOnScreen()
        binding.score.text = getString(R.string.score, 0)
        binding.wordCount.text = getString(
            R.string.word_count, 0, MAX_NO_OF_WORDS)
    }

Actividad principal.kt

package com.example.android.unscramble

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

class MainActivity : AppCompatActivity(R.layout.main_activity) {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
    }
}

actividad_principal.xml

<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">

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/game_fragment"
        android:name="com.example.android.unscramble.ui.game.GameFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

juego_fragmento.xml

<ScrollView 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">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="@dimen/default_padding"
        tools:context=".ui.game.GameFragment">

        <Button
            android:id="@+id/skip"
            style="?attr/materialButtonOutlinedStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/default_padding"
            android:layout_marginEnd="@dimen/default_padding"
            android:text="@string/skip"
            app:layout_constraintBaseline_toBaselineOf="@+id/submit"
            app:layout_constraintEnd_toStartOf="@+id/submit"
            app:layout_constraintStart_toStartOf="parent" />

        <Button
            android:id="@+id/submit"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/default_margin"
            android:text="@string/submit"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/skip"
            app:layout_constraintTop_toBottomOf="@+id/textField" />

        <TextView
            android:id="@+id/textView_instructions"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/instructions"
            android:textSize="17sp"
            app:layout_constraintBottom_toTopOf="@+id/textField"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView_unscrambled_word" />

        <TextView
            android:id="@+id/textView_unscrambled_word"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/default_margin"
            android:layout_marginBottom="@dimen/default_margin"
            android:textAppearance="@style/TextAppearance.MaterialComponents.Headline3"
            app:layout_constraintBottom_toTopOf="@+id/textView_instructions"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/word_count"
            tools:text="Scramble word" />

        <TextView
            android:id="@+id/word_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/word_count"
            android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
            app:layout_constraintBottom_toTopOf="@+id/textView_unscrambled_word"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="3 of 10 words" />

        <TextView
            android:id="@+id/score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/score"
            android:textAllCaps="true"
            android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Score: 20" />

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textField"
            style="@style/Widget.Unscramble.TextInputLayout.OutlinedBox"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/default_margin"
            android:hint="@string/enter_your_word"
            app:errorIconDrawable="@drawable/ic_error"
            app:helperTextTextAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"
            app:layout_constraintBottom_toTopOf="@+id/submit"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView_instructions">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/text_input_edit_text"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:inputType="textPersonName|textNoSuggestions"
                android:maxLines="1" />
        </com.google.android.material.textfield.TextInputLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

¿Estás seguro de que com.example.android.unscramble.ui.game.GameFragment es el nombre de clase completo correcto para este fragmento? Supongo que GameFragment reside en algún otro paquete; si estuviera en com.example.android.unscramble.ui.game, entonces no necesitarías las declaraciones de importación para MAX_NO_OF_WORDS y allWordsList.

- CommonsWare

28/03/2021 a las 12:13

@CommonsWare, creo que sí. Adjunté dos capturas de pantalla (enlaces) a la publicación

- LAO

28/03/2021 a las 12:37

¿Qué contiene la línea del paquete en la parte superior de GameFragment?

- CommonsWare

28/03/2021 a las 12:50

@CommonsWare Supongo que ya está descargada la primera parte del proyecto. Sin embargo, al principio extraje el proyecto, solo después lo importé.

- LAO

28/03/2021 a las 13:12

@CommonsWare creo que tiene algo que ver con ListofWords, otros archivos no permiten usar sus variables sin solicitudes de importación directa por algún motivo

- LAO

28/03/2021 a las 13:26



------------------------------------

Mi mejor suposición es que la línea del paquete en la parte superior de su archivo GameFragment no coincide con el directorio en el que tiene el archivo. Kotlin le permite hacer eso, aunque debería recibir una advertencia al respecto en el IDE. Entonces, mientras el archivo está ubicado en el lugar correcto, la línea del paquete dice qué paquete usará Kotlin para la clase. Si la línea del paquete tiene algo más, o falta por completo, eso explicaría su error.

Lo ideal es que el código fuente de Kotlin siga la regla de Java: el paquete y el directorio están alineados y utilizan los mismos segmentos en cada uno. En su caso, eso significaría que la línea del paquete en tLa parte superior de GameFragment.kt debería ser:

package com.example.android.unscramble.ui.game

0



------------------------------------

Intenta inflar Game Fragment dinámicamente haciendo esto:

en el lugar main_activity.xml:

<FrameLayout
    android:id="@+id/fragmentContainer"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"/>

En lugar de

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/game_fragment"
    android:name="com.example.android.unscramble.ui.game.GameFragment"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent" />

Luego, en onCreate de la actividad principal, llame a esto:

supportFragmentManager.beginTransaction().replace(R.id.fragmentContainer, GameFragment()).commit()

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare