0

我有这个代码

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

`

4

3 回答 3

4

你的问题是这样的:

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

在将 EditTexts 的实例添加到 Activity 之前,您正在初始化 EditTexts

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

于 2013-03-18T20:02:52.877 回答
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方法中也初始化这些。

于 2013-03-18T20:00:22.253 回答
0

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

您的调试可能有不同的 google-services 文件,而发布可能有另一个 .. 与 IOS googleinfo.plist 相同

于 2020-04-20T03:34:56.273 回答