Estoy intentando hacer una especie de juego que básicamente consiste en 2 pantallas, una de título y otra de juego. La de juego tiene una rotación de imágenes y 2 botones y la de título solo tiene el título y 2 botones. Lo único que tendría que pasar es que al iniciar se inicie la de título y al presionar el botón se cambie a la de juego, dentro de la de juego, una imagen cambiaría cada vez que se presione el botón.
El problema que tengo es que ni siquiera inicia la aplicación, este es el error que sale:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mosorior.bpbm, PID: 9764
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mosorior.bpbm/com.mosorior.bpbm.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3365)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:173)
at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:174)
at android.content.Context.obtainStyledAttributes(Context.java:744)
at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:842)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:809)
at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:633)
at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:259)
at com.mosorior.bpbm.MainActivity.<init>(MainActivity.java:10)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
He pensado que puede ser cosa de alguna configuración mal puesta del Manifest, pero la verdad es que no tengo ni idea, he empezado hace muy poco con Android Studio. Dejo por aquí el Manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mosorior.bpbm"
tools:ignore="ExtraText">
<application
android:icon="@mipmap/icon"
android:allowBackup="true"
android:fullBackupContent="@xml/my_backup_rules"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.BPBM">
<activity android:name=".MainActivity" android:icon="@drawable/icon">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="Ingame" android:parentActivityName=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.SED" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>
</manifest>
También el MainActivity.java:
package com.mosorior.bpbm;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageButton;
public class MainActivity extends AppCompatActivity {
ImageButton play_btn = findViewById(R.id.play_btn);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play_btn.setOnClickListener(v -> {
Intent intent;
intent = new Intent(MainActivity.this, Ingame.class);
startActivity(intent);
});
}
}
El ActivityIngame (actividad secundaria):
<?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"
android:background="@drawable/background"
android:id="@+id/container"
tools:context=".Ingame">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="-57dp">
<ImageView
android:id="@+id/imgRandom"
android:layout_width="match_parent"
android:layout_height="500dp"
android:layout_marginTop="25dp"
app:srcCompat="@drawable/title"
tools:srcCompat="@drawable/alcahueta_time"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageButton
android:id="@+id/next_btn"
android:layout_width="210dp"
android:layout_height="100dp"
android:layout_gravity="bottom"
android:layout_marginStart="20dp"
android:layout_marginLeft="20dp"
android:layout_marginBottom="25dp"
android:layout_weight="1"
android:gravity="bottom"
android:scaleType="fitStart"
app:srcCompat="@drawable/btn_next"
tools:ignore="ContentDescription" />
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageButton
android:id="@+id/btn"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="bottom"
android:gravity="bottom"
android:layout_marginRight="20dp"
android:layout_marginBottom="25dp"
android:layout_weight="1"
android:scaleType="fitStart"
app:srcCompat="@drawable/btn"
tools:ignore="ContentDescription,RtlHardcoded" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Y el Ingame.java:
package com.mosorior.bpbm;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.util.Random;
public class Ingame extends AppCompatActivity {
private static final Random rgenerador = new Random();
private static final Integer[] imagenesID=
{R.drawable.alcahueta_time, R.drawable.anda_ya, R.drawable.arre_jamelgo, R.drawable.bailarina_ex_tica, R.drawable.batalla_de_gallos, R.drawable.beber_en_soledad, R.drawable.beber_por_un_calent_n, R.drawable.casar__matar__follar, R.drawable.comiendo_a_ciegas, R.drawable.duelo_a_muerte, R.drawable.el__ltimo_paga, R.drawable.el_mordisco_del_gringo, R.drawable.examen_sorpresa, R.drawable.highway_to_hell, R.drawable.hola_guapa, R.drawable.hoy_no_conduces, R.drawable.humano_en_pr_cticas, R.drawable.i_m_not_throwing_away_my_shot, R.drawable.influencer, R.drawable.insisto, R.drawable.joker, R.drawable.jugando_a_ser_hackers, R.drawable.la_cosa_se_pone_caliente, R.drawable.la_voluntad_de_la_moneda, R.drawable.mear_en_compa__a, R.drawable.mimo, R.drawable.no_hace_falta_bola, R.drawable.no_hace_falta_gimnasio, R.drawable.piercing_de_borrachera, R.drawable.pocky_game, R.drawable.por_la_futura_boda, R.drawable.quedas_libre_de_la_c_rcel, R.drawable.se_ve_que_te_gusta_beber, R.drawable.si_te_r_es_pierdes, R.drawable.sin_usar_las_manos, R.drawable.sing_along, R.drawable.t__oolong, R.drawable.trio, R.drawable.verdad_oculta, R.drawable.yamete_kudasai};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ingame);
Intent intent = getIntent();
final ImageView iv;
iv = findViewById(R.id.imgRandom);
View next_btn = findViewById(R.id.next_btn);
next_btn.setOnClickListener(v -> {
int resource =
imagenesID[rgenerador.nextInt(imagenesID.length)];
iv.setImageResource(resource);
});
}
}
Si podéis decirme cuál es el problema y como solucionarlo estaría muy agradecido. Si falta ver algún archivo no tengo problemas en pasarlo, como he dicho, soy bastante nuevo en esto y no sé apenas nada.
Gracias por adelantado.