2013-07-26 3 views
0

나는 앱을 프로그래밍하고 있었고, 테스트를하고 싶었던 당시 Logcat은 나에게 다음과 같은 로그를 준다. 왜 이런 일이 일어나는지, 전화와 에뮬레이터는 "불행히도 애플리케이션이 멈췄다" 메시지 :치명적인 예외 안드로이드에서 메인 실행 응용 프로그램?

package com.xanmaya.kapschfinal; 

import android.net.Uri; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 


Button btnEnviar = (Button) findViewById(R.id.btnEnviar); 
btnEnviar.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    }} 
); 
return true; 

} 
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, "[email protected]"); 
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"));}}`code: 

아픈 당신의 도움을 주셔서 감사합니다 : 여기

07-26 19:47:03.880: W/dalvikvm(834): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
07-26 19:47:03.910: E/AndroidRuntime(834): FATAL EXCEPTION: main 
07-26 19:47:03.910: E/AndroidRuntime(834): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.xanmaya.kapschfinal/com.xanmaya.kapschfinal.MainActivity}: java.lang.NullPointerException 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.os.Looper.loop(Looper.java:137) 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-26 19:47:03.910: E/AndroidRuntime(834): at java.lang.reflect.Method.invokeNative(Native Method) 
07-26 19:47:03.910: E/AndroidRuntime(834): at java.lang.reflect.Method.invoke(Method.java:511) 
07-26 19:47:03.910: E/AndroidRuntime(834): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-26 19:47:03.910: E/AndroidRuntime(834): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-26 19:47:03.910: E/AndroidRuntime(834): at dalvik.system.NativeStart.main(Native Method) 
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): at java.lang.Class.newInstanceImpl(Native Method) 
07-26 19:47:03.910: E/AndroidRuntime(834): at java.lang.Class.newInstance(Class.java:1319) 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
07-26 19:47:03.910: E/AndroidRuntime(834): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
07-26 19:47:03.910: E/AndroidRuntime(834): ... 11 more 

코드입니다! 고맙습니다!

답변

0

우선이 코드는 컴파일됩니까? 아니면 여기에 잘못 붙여 넣은거야?

1) findViews는 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); 

2)이 추가?

{ 
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO); 
    emailIntent.setData(Uri.parse("mailto:")); 
    emailIntent.putExtra(Intent.EXTRA_EMAIL, "[email protected]"); 
    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"));}}: 

btnEnviar의 onClick 내에 추가하십시오.

1

야, setContentView를 호출 한 후 onCreate에있는 모든보기 초기화를 호출하십시오. 클래스 멤버 초기화는 암시 적 호출 후 생성자에서 바로 호출되거나 super (...)이 아니라 생성자에서 호출됩니다. 나중에보기가 onCreate에서 만들어집니다. 에 초점을 로그에서

0

선은

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) 

같이 findViewById()는 MainActivity의 라인 (36)에서 지정된보기와보기를 찾는되지이다. 이보기가 XML 레이아웃에 있는지 확인하십시오.

0

당신의 코드가 포맷하는 방법을 알아보기 힘들 그러나 그들은 아무것도하기 전에 전화를받을 것이다, 그래서

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

어떤 방법의 외부에있는이 선이, 특히 onCreate() 당신이 setContentView() 전화 어디에 나타나는 그들을 null로 만들 것입니다.

Views이 레이아웃에 있으므로 setContentView()을 호출하여 레이아웃을 부 풀리기 전에 초기화하려고하면 null을 반환합니다. 보다 일반적인 방법과 더 읽기 쉬운 방법은 멤버 변수로 선언 한 다음 onCreate()으로 초기화하거나 AFTER ALL을 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); 

}