Android EXCEPTION FATALE: principal?
j'ai ce code
package com.UPFIM.casa;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
public class Constancias extends Activity {
public String nivels;
public String tipos;
public String cant;
public String fot;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.constancias);
EditText nombre = (EditText) findViewById(R.id.name);
EditText matricula = (EditText) findViewById(R.id.edusuario);
EditText mensaje;
EditText subje;
final String nivel[]=new String[]{"Nivel","Preparatoria","Profesional"};
final String tipoc[]=new String[]{"Tipo de Constancia",
"Inscripción en el Periodo en Curso",
"Inscripción en el Periodo Inmediato Anterior",
"Inscripción con Periodo Vacacional",
"Servicio Militar Nacional",
"Inscripción con Promedio Acumulado",
"Inscripción con Promedio del Periodo Inmediato Anterior",
"Inscripción en el Periodo en Curso con Materias Inscritas",
"Inscripción en el Periodo Inmediato Anterior con Materias",
"Inscripción con Promedio del Periodo Inmediato Anterior y Promedio Acumulado",
"Inscripción en el Periodo en Curso con Materias Inscritas y Calificaciones",
"Inscripción en el Periodo Inmediato Anterior con Materias que se Cursaron y Calificaciones",
"Inscripción en el Periodo de Verano",
"Documentación en Trámite de Legalización",
"Documentación en trámite de Apostille",
"Terminación de Estudios",
"Terminación de Estudios con Promedio",
"Carta de Buena Conducta",
"Nivel de Ingles",
"Beca"};
final String[] cantidad = new String[]{"1->$20.00","2->$40.00","3->$60.00","4->$80.00","5->$100.00"};
final String[] foto = new String[]{"Si","No"};
final Spinner spinner1 = (Spinner)findViewById(R.id.spinner1);
final Spinner spinner2 = (Spinner)findViewById(R.id.spinner2);
final Spinner spinner3 = (Spinner)findViewById(R.id.spinner3);
final Spinner spinner4 = (Spinner)findViewById(R.id.spinner4);
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, nivel);
spinner1.setAdapter(adapter);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter);
spinner1.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
android.view.View v, int position, long id) {
nivels = new String("\nNivel: " + nivel[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
nivels = new String("");
}
});
ArrayAdapter<String> adapter1 =
new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, tipoc);
spinner2.setAdapter(adapter1);
adapter1.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter1);
spinner2.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
android.view.View v, int position1, long id) {
tipos = new String("\nTipo: " + tipoc[position1]);
}
public void onNothingSelected(AdapterView<?> parent) {
tipos = new String("");
}
});
ArrayAdapter<String> adapter2 =
new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, cantidad);
spinner3.setAdapter(adapter2);
adapter2.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner3.setAdapter(adapter2);
spinner3.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
android.view.View v, int position2, long id) {
cant = new String("\nCantidad: " + cantidad[position2]);
}
public void onNothingSelected(AdapterView<?> parent) {
cant = new String("");
}
});
ArrayAdapter<String> adapter3 =
new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, foto);
spinner4.setAdapter(adapter3);
adapter3.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner4.setAdapter(adapter3);
spinner4.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
android.view.View v, int position3, long id) {
fot = new String("\nFoto: " + foto[position3]);
}
public void onNothingSelected(AdapterView<?> parent) {
fot = new String("");
}
});
mensaje.setText("" + nombre.getText().toString() + "\n" + matricula.getText().toString() + nivels + tipos + cant + fot );
subje.setText("Solicitud de Constancia APP");
}
public void enviarme (View view){
Intent itSend = new Intent( android.content.Intent.ACTION_SEND);
itSend.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
itSend.putExtra(android.content.Intent.EXTRA_SUBJECT,subje.getText());
itSend.putExtra(android.content.Intent.EXTRA_TEXT, mensaje.getText());
startActivity(itSend);
}
}
Mais je n'ai pas trouvé mon erreur, car je vois ce journal
03-18 19:26:28.065: E/AndroidRuntime(371): FATAL EXCEPTION: main
03-18 19:26:28.065: E/AndroidRuntime(371): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.UPFIM.casa/com.UPFIM.casa.Constancias}: java.lang.NullPointerException
03-18 19:26:28.065: E/AndroidRuntime(371): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
03-18 19:26:28.065: E/AndroidRuntime(371): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-18 19:26:28.065: E/AndroidRuntime(371): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-18 19:26:28.065: E/AndroidRuntime(371): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-18 19:26:28.065: E/AndroidRuntime(371): at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 19:26:28.065: E/AndroidRuntime(371): at android.os.Looper.loop(Looper.java:123)
03-18 19:26:28.065: E/AndroidRuntime(371): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-18 19:26:28.065: E/AndroidRuntime(371): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 19:26:28.065: E/AndroidRuntime(371): at java.lang.reflect.Method.invoke(Method.java:507)
03-18 19:26:28.065: E/AndroidRuntime(371): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-18 19:26:28.065: E/AndroidRuntime(371): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-18 19:26:28.065: E/AndroidRuntime(371): at dalvik.system.NativeStart.main(Native Method)
03-18 19:26:28.065: E/AndroidRuntime(371): Caused by: java.lang.NullPointerException
03-18 19:26:28.065: E/AndroidRuntime(371): at android.app.Activity.findViewById(Activity.java:1647)
03-18 19:26:28.065: E/AndroidRuntime(371): at com.UPFIM.casa.Constancias.<init>(Constancias.java:22)
ici est la mise en page:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/fondo">
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/tituloAbout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:gravity="center"
android:text="@string/constancias"
android:textSize="15dp" />
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/vacio"
android:paddingLeft="10dip"/>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/nom" android:paddingLeft="10dip"/>
<EditText
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:inputType="textPersonName"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:paddingLeft="10dip"
android:text="@string/Nivel" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:paddingLeft="10dip"
android:text="@string/tipo" />
<Spinner
android:id="@+id/spinner2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:paddingLeft="10dip"
android:text="@string/cant" />
<Spinner
android:id="@+id/spinner3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:paddingLeft="10dip"
android:text="@string/foto" />
<Spinner
android:id="@+id/spinner4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/btn1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingLeft="10dip"
android:text="@string/Advertencia" />
<Button
android:id="@+id/enviar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:paddingLeft="10dip"
android:text="@string/send"
android:onClick="enviarme" />
</LinearLayout>
</ScrollView>
`
Vous devez vous connecter pour publier un commentaire.
Votre problème est le suivant:
Vous êtes en cours d'initialisation EditTexts avant leurs instances sont ajoutés à l'Activité par
Donc, ce sera toujours jeter
NPE
.Solution: Déplacer ces lignes derrière
setContentView()
et ça fonctionne.Explication:
Chaque fois que vous voulez initialiser vos widgets avec
findViewById()
tout d'abord doit être appeléparce que la clé but de
setContentView()
méthode est de créer toutes les instances de l'INTERFACE utilisateur, les éléments contenus dans la mise en page permet de définir et qui sera défini comme le contenu de l'Activité. Donc, toujours si vous devez appelerfindViewById()
avantsetContentView()
il jette toujoursNullPointerException
car les Vues sont nulles.EditText mensaje; EditText subje;
vous avez besoin de l'initialiser eux.Pour obtenir la vue d'abord, vous devez définir la disposition de l'activité.
Déplacer ces lignes à l'intérieur de la méthode onCreate.
comme
EDIT:
Vous n'avez même pas initialiser le
et ici vous définir le texte.
De nouveau ici NPE
Donc initialiser ces aussi dans
onCreate
méthode que j'ai initialisé au-dessus.itSend.putExtra(android.content.Intent.EXTRA_SUBJECT,subje.getText());
itSend.putExtra(android.content.Intent.EXTRA_TEXT, mensaje.getText());
dans subje et mensaje