Не удалось запустить Activity ComponentInfo {…}: java.lang.NullPointerException

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

Код ниже довольно прост, и единственная цель – перейти от MainActivity.java к IMC.java. Однако я искал решение для этого во многих учебных пособиях, и я действительно не понимаю, что я делаю неправильно…

package com.example.firstapp; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.Button; import android.view.View; import android.view.View.OnClickListener; public class MainActivity extends Activity { Button IMC; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IMC = (Button) findViewById(R.id.buttonIMC); IMC.setOnClickListener(IMCListener); } // Listener du bouton IMC private OnClickListener IMCListener = new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,IMC.class); startActivity(i); } }; } 

В файле activity_main.xml я получил следующий код:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".IMC" > <Button android:id="@+id/buttonIMC" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="IMC" /> </RelativeLayout> 

Трассировка стека

 11-03 16:30:04.877: E/AndroidRuntime(619): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.firstapp/com.example.firstapp.IMC}: java.lang.NullPointerException 11-03 16:30:04.877: E/AndroidRuntime(619): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 11-03 16:30:04.877: E/AndroidRuntime(619): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 11-03 16:30:04.877: E/AndroidRuntime(619): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 11-03 16:30:04.877: E/AndroidRuntime(619): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 11-03 16:30:04.877: E/AndroidRuntime(619): at android.os.Handler.dispatchMessage(Handler.java:99) 11-03 16:30:04.877: E/AndroidRuntime(619): at android.os.Looper.loop(Looper.java:123) 11-03 16:30:04.877: E/AndroidRuntime(619): at android.app.ActivityThread.main(ActivityThread.java:4627) 11-03 16:30:04.877: E/AndroidRuntime(619): at java.lang.reflect.Method.invokeNative(Native Method) 11-03 16:30:04.877: E/AndroidRuntime(619): at java.lang.reflect.Method.invoke(Method.java:521) 11-03 16:30:04.877: E/AndroidRuntime(619): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 11-03 16:30:04.877: E/AndroidRuntime(619): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 11-03 16:30:04.877: E/AndroidRuntime(619): at dalvik.system.NativeStart.main(Native Method) 11-03 16:30:04.877: E/AndroidRuntime(619): Caused by: java.lang.NullPointerException 11-03 16:30:04.877: E/AndroidRuntime(619): at com.example.firstapp.IMC.onCreate(IMC.java:57) 11-03 16:30:04.877: E/AndroidRuntime(619): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 11-03 16:30:04.877: E/AndroidRuntime(619): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

И манифест здесь ниже

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.firstapp" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.firstapp.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.firstapp.MainActivity2" android:label="@string/title_activity_main_activity2" > </activity> <activity android:name="com.example.firstapp.IMCActivity" android:label="@string/title_activity_imc" > </activity> <activity android:name="com.example.firstapp.Interest" android:label="@string/title_activity_interest" > </activity> <activity android:name="com.example.firstapp.IMC" android:label="@string/title_activity_imc" > </activity> </application> </manifest> 

Активность IMC уже установлена ​​и работает правильно (в основном, это всего лишь простое вычисление). И быть исчерпывающим здесь:

 package com.example.firstapp; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import android.text.TextWatcher; import android.text.Editable; public class IMC extends Activity { // La chaîne de caractères par défaut private final String defaut = "Vous devez cliquer sur le bouton « Calculer l'IMC » pour obtenir un résultat."; // La chaîne de caractères de la megafonction private final String megaString = "Vous faites un poids parfait ! Wahou ! Trop fort ! On dirait Brad Pitt (si vous êtes un homme)/Angelina Jolie (si vous êtes une femme)/Willy (si vous êtes un orque) !"; Button envoyer = null; Button raz = null; EditText poids = null; EditText taille = null; RadioGroup group = null; TextView result = null; CheckBox mega = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // On récupère toutes les vues dont on a besoin envoyer = (Button)findViewById(R.id.calcul); raz = (Button)findViewById(R.id.raz); taille = (EditText)findViewById(R.id.taille); poids = (EditText)findViewById(R.id.poids); mega = (CheckBox)findViewById(R.id.mega); group = (RadioGroup)findViewById(R.id.group); result = (TextView)findViewById(R.id.result); // On attribue un listener adapté aux vues qui en ont besoin envoyer.setOnClickListener(envoyerListener); raz.setOnClickListener(razListener); taille.addTextChangedListener(textWatcher); poids.addTextChangedListener(textWatcher); // Solution avec des onKey //taille.setOnKeyListener(modificationListener); //poids.setOnKeyListener(modificationListener); mega.setOnClickListener(checkedListener); } /* // Se lance à chaque fois qu'on appuie sur une touche en étant sur un EditText private OnKeyListener modificationListener = new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { // On remet le texte à sa valeur par défaut pour ne pas avoir de résultat incohérent result.setText(defaut); return false; } };*/ private TextWatcher textWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { result.setText(defaut); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }; // Uniquement pour le bouton "envoyer" private OnClickListener envoyerListener = new OnClickListener() { @Override public void onClick(View v) { if(!mega.isChecked()) { // Si la megafonction n'est pas activée // On récupère la taille String t = taille.getText().toString(); // On récupère le poids String p = poids.getText().toString(); float tValue = Float.valueOf(t); // Puis on vérifie que la taille est cohérente if(tValue == 0) Toast.makeText(IMC.this, "Hého, tu es un Minipouce ou quoi ?", Toast.LENGTH_SHORT).show(); else { float pValue = Float.valueOf(p); // Si l'utilisateur a indiqué que la taille était en centimètres // On vérifie que la Checkbox sélectionnée est la deuxième à l'aide de son identifiant if(group.getCheckedRadioButtonId() == R.id.radio2) tValue = tValue / 100; tValue = (float)Math.pow(tValue, 2); float imc = pValue / tValue; result.setText("Votre IMC est " + String.valueOf(imc)); } } else result.setText(megaString); } }; // Listener du bouton de remise à zéro private OnClickListener razListener = new OnClickListener() { @Override public void onClick(View v) { poids.getText().clear(); taille.getText().clear(); result.setText(defaut); } }; // Listener du bouton de la megafonction. private OnClickListener checkedListener = new OnClickListener() { @Override public void onClick(View v) { // On remet le texte par défaut si c'était le texte de la megafonction qui était écrit if(!((CheckBox)v).isChecked() && result.getText().equals(megaString)) result.setText(defaut); } }; } 

(Этот код выше не от меня, он исходит из учебника, найденного на openclassroom)

Если бы у вас была какая-то идея, было бы очень признательно 🙂

Благодаря!

Solutions Collecting From Web of "Не удалось запустить Activity ComponentInfo {…}: java.lang.NullPointerException"

 Line 57 of IMC.java envoyer.setOnClickListener(envoyerListener) 

Похоже, что envoyer имеет значение null.

У тебя есть

  setContentView(R.layout.activity_main); 

В вашем R.id.calcul activity_main.xml нет кнопки с идентификатором R.id.calcul .

Вы должны изменить это

  setContentView(R.layout.imc); // layout xml for IMC Activity 

Убедитесь, что у него есть кнопка с идентификатором R.id.calcul и она будет работать.

Пожалуйста, проверьте размер изображения, которое вам дано, и измените изображение, если это возможно. Android: src = "@ drawable / youimage"