Android FATAL EXCEPTION:主?

时间:2013-03-18 19:59:24

标签: android android-manifest

我有这个代码

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[]{"spartan-004@hotmail.com"});
         itSend.putExtra(android.content.Intent.EXTRA_SUBJECT,subje.getText());
         itSend.putExtra(android.content.Intent.EXTRA_TEXT, mensaje.getText());

         startActivity(itSend);

     }



}

但我没有找到我的错误,因为我看到了这个日志

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)

这是布局:

<?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         机器人:layout_width = “FILL_PARENT”         机器人:layout_height = “FILL_PARENT” &GT;         

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

`

3 个答案:

答案 0 :(得分:3)

你的问题是:

EditText nombre = (EditText) findViewById(R.id.name);
EditText matricula = (EditText) findViewById(R.id.edusuario);

您正在将EditTexts的实例添加到Activity by

之前进行初始化
setContentView();

所以这总是会抛出 NPE

解决方案:将这些行移到setContentView()后面,它会起作用。

setContentView(R.layout.constancias);
EditText nombre = (EditText) findViewById(R.id.name);
EditText matricula = (EditText) findViewById(R.id.edusuario);

说明:

每当您想要使用findViewById()初始化小部件时,必须先调用

setContentView(R.layout.layoutId)

因为setContentView()方法的关键目的是创建您定义的布局中包含的UI元素的所有实例,并将其设置为Activity的内容。因此,如果您在findViewById()之前致电setContentView(),则始终会抛出NullPointerException因为视图为空。

答案 1 :(得分:1)

要首先获取视图,您需要设置活动布局。

在onCreate方法中移动这些行。

EditText nombre = (EditText) findViewById(R.id.name);
EditText matricula = (EditText) findViewById(R.id.edusuario);

 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;

在这里设置文本。

再次在这里NPE

mensaje.setText("" + nombre.getText().toString() + "\n" + matricula.getText().toString() + nivels + tipos + cant + fot );
subje.setText("Solicitud de Constancia APP");

所以我在上面初始化的onCreate方法中也初始化了这些。

答案 2 :(得分:0)

您可能正在处理2个不同的项目,并且错误地将一个项目的google-services.json复制到了另一个项目。它发生在我身上。希望对您有帮助

您的调试程序可能具有不同的google-services文件,而发行版中可能还有另一个..对于IOS googleinfo.plist