Java Android上运行的主应用程序出现致命异常?

Java Android上运行的主应用程序出现致命异常?,java,android,eclipse,exception,execution,Java,Android,Eclipse,Exception,Execution,我一直在编写一个应用程序,在我想进行测试时,eclipse Logcat给了我以下日志我不知道为什么会发生这种情况,手机和模拟器会显示“不幸的是,您的应用程序已停止”消息: 谢谢你的帮助!谢谢大家! Dude,在调用setContentView之后,在onCreate中调用所有视图初始化。类成员初始化是在调用implicit或notsuper(…)之后立即在构造函数中调用的。稍后将在onCreate中创建视图 日志中要关注的行是 07-26 19:47:03.910: E/Android

我一直在编写一个应用程序,在我想进行测试时,eclipse Logcat给了我以下日志我不知道为什么会发生这种情况,手机和模拟器会显示“不幸的是,您的应用程序已停止”消息:


谢谢你的帮助!谢谢大家!

Dude,在调用setContentView之后,在
onCreate
中调用所有视图初始化。类成员初始化是在调用implicit或not
super(…)
之后立即在构造函数中调用的。稍后将在onCreate中创建视图

日志中要关注的行是

    07-26 19:47:03.910: E/AndroidRuntime(834): Caused by: java.lang.NullPointerException
    07-26 19:47:03.910: E/AndroidRuntime(834):  at android.app.Activity.findViewById(Activity.java:1839)
    07-26 19:47:03.910: E/AndroidRuntime(834):  at com.xanmaya.kapschfinal.MainActivity.<init>(MainActivity.java:36)
07-26 19:47:03.910:E/AndroidRuntime(834):由以下原因引起:java.lang.NullPointerException
07-26 19:47:03.910:E/AndroidRuntime(834):在android.app.Activity.findViewById(Activity.java:1839)
07-26 19:47:03.910:E/AndroidRuntime(834):位于com.xanmaya.kapschfinal.MainActivity。(MainActivity.java:36)

findViewById()未在MainActivity的第36行找到具有指定视图的视图。检查xml布局中是否存在此视图。

很难以格式化的方式读取代码,但这些行似乎

EditText etModulo = (EditText) findViewById(R.id.etModulo);
EditText etAmpli = (EditText) findViewById(R.id.etAmpli);
EditText etAntena = (EditText) findViewById(R.id.etAntena);
EditText etCable = (EditText) findViewById(R.id.etCable);
EditText etFecha = (EditText) findViewById(R.id.etFecha);
EditText etlugar = (EditText) findViewById(R.id.etlugar);
EditText etenvia = (EditText) findViewById(R.id.etenvia);
CheckBox checkampli = (CheckBox) findViewById(R.id.checkampli);
CheckBox checkantena = (CheckBox) findViewById(R.id.checkantena);
CheckBox checkmodulo = (CheckBox) findViewById(R.id.checkmodulo);
CheckBox checkcable = (CheckBox) findViewById(R.id.checkcable);
在任何方法之外,因此它们将在任何其他方法之前被调用,特别是在调用
setContentView()
的地方,这将使它们
null

您的
视图
存在于布局中,因此如果您在调用
setContentView()
膨胀布局之前尝试初始化视图,它们将返回
null
。一种更为传统、更具可读性的方法是将它们声明为成员变量,然后在
onCreate()
中初始化它们,或者如果您在
setContentView()
之后选择,则在初始化方法中初始化它们。所以它可能看起来像

public class MainActivity extends Activity {

    EditText etModulo;   // you can declare them as member variables here so they can be used anywhere in the class
    EditText etAmpli; 
    EditText etAntena; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    etModulo = (EditText) findViewById(R.id.etModulo);   // but initialize them here after inflating your layout
    etAmpli = (EditText) findViewById(R.id.etAmpli);
    etAntena = (EditText) findViewById(R.id.etAntena);

}

首先,这段代码甚至可以编译吗?还是你把它贴错了

1) 您的FindView应该在setContentView()之后的onCreate中

因此,请将此添加到onCreate中

EditText etModulo = (EditText) findViewById(R.id.etModulo);
EditText etAmpli = (EditText) findViewById(R.id.etAmpli);
EditText etAntena = (EditText) findViewById(R.id.etAntena);
EditText etCable = (EditText) findViewById(R.id.etCable);
EditText etFecha = (EditText) findViewById(R.id.etFecha);
EditText etlugar = (EditText) findViewById(R.id.etlugar);
EditText etenvia = (EditText) findViewById(R.id.etenvia);
CheckBox checkampli = (CheckBox) findViewById(R.id.checkampli);
CheckBox checkantena = (CheckBox) findViewById(R.id.checkantena);
CheckBox checkmodulo = (CheckBox) findViewById(R.id.checkmodulo);
CheckBox checkcable = (CheckBox) findViewById(R.id.checkcable);
< P 2)此外,这个代码是在什么地方做的?

{
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:"));
    emailIntent.putExtra(Intent.EXTRA_EMAIL, "villasantdesign@gmail.com");
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Resumen");
    emailIntent.putExtra(Intent.EXTRA_TEXT, etModulo.getText()); etAntena.getText(); etCable.getText(); etlugar.getText(); etFecha.getText(); etAmpli.getText();}{;
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setType("message/rfc822");
    startActivity(Intent.createChooser(emailIntent, "btnEnviar"));}}:
将此添加到您的Btneviar的onClick中

EditText etModulo = (EditText) findViewById(R.id.etModulo);
EditText etAmpli = (EditText) findViewById(R.id.etAmpli);
EditText etAntena = (EditText) findViewById(R.id.etAntena);
EditText etCable = (EditText) findViewById(R.id.etCable);
EditText etFecha = (EditText) findViewById(R.id.etFecha);
EditText etlugar = (EditText) findViewById(R.id.etlugar);
EditText etenvia = (EditText) findViewById(R.id.etenvia);
CheckBox checkampli = (CheckBox) findViewById(R.id.checkampli);
CheckBox checkantena = (CheckBox) findViewById(R.id.checkantena);
CheckBox checkmodulo = (CheckBox) findViewById(R.id.checkmodulo);
CheckBox checkcable = (CheckBox) findViewById(R.id.checkcable);
{
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:"));
    emailIntent.putExtra(Intent.EXTRA_EMAIL, "villasantdesign@gmail.com");
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Resumen");
    emailIntent.putExtra(Intent.EXTRA_TEXT, etModulo.getText()); etAntena.getText(); etCable.getText(); etlugar.getText(); etFecha.getText(); etAmpli.getText();}{;
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setType("message/rfc822");
    startActivity(Intent.createChooser(emailIntent, "btnEnviar"));}}: