2014-07-23 3 views
0

간단한 프로그램 작성을 마쳤으나 에뮬레이터에서 실행하려고하면 중지되고 LogCat에서 다음 오류가 표시됩니다. 내 MainActivity.javaactivity_main.xml도 아래에 제공됩니다.안드로이드 용 버그 계산기 프로그램

07-23 07:43:17.256: D/AndroidRuntime(1259): Shutting down VM 
07-23 07:43:17.256: W/dalvikvm(1259): threadid=1: thread exiting with uncaught exception (group=0xb3ad7ba8) 
07-23 07:43:17.296: E/AndroidRuntime(1259): FATAL EXCEPTION: main 
07-23 07:43:17.296: E/AndroidRuntime(1259): Process: com.example.owncode, PID: 1259 
07-23 07:43:17.296: E/AndroidRuntime(1259): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.owncode/com.example.owncode.MainActivity}: java.lang.NullPointerException 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.os.Handler.dispatchMessage(Handler.java:102) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.os.Looper.loop(Looper.java:136) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at java.lang.reflect.Method.invoke(Method.java:515) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at dalvik.system.NativeStart.main(Native Method) 
07-23 07:43:17.296: E/AndroidRuntime(1259): Caused by: java.lang.NullPointerException 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.app.Activity.findViewById(Activity.java:1884) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at com.example.owncode.MainActivity.<init>(MainActivity.java:11) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at java.lang.Class.newInstanceImpl(Native Method) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at java.lang.Class.newInstance(Class.java:1208) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112) 
07-23 07:43:17.296: E/AndroidRuntime(1259):  ... 11 more 
07-23 07:43:27.146: I/Process(1259): Sending signal. PID: 1259 SIG: 9 

다음은 나의 JAVA 코드입니다.

package com.example.owncode; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 

public class MainActivity extends Activity { 
EditText calculatorText = (EditText) findViewById(R.id.calculatorText); 

@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); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

public void button_one_click(View view){ 
    calculatorText.append("1"); 
} 

public void button_two_click(View view){ 
    calculatorText.append("2"); 
} 
public void button_three_click(View view){ 
    calculatorText.append("3"); 
} 
public void button_four_click(View view){ 
    calculatorText.append("4"); 
} 
public void button_five_click(View view){ 
    calculatorText.append("5"); 
} 
public void button_six_click(View view){ 
    calculatorText.append("6"); 
} 
public void button_seven_click(View view){ 
    calculatorText.append("7"); 
} 
public void button_eight_click(View view){ 
    calculatorText.append("8"); 
} 
public void button_nine_click(View view){ 
    calculatorText.append("9"); 
} 
public void button_zero_click(View view){ 
    calculatorText.append("0"); 
} 
public void button_plus_click(View view){ 
    calculatorText.append("+"); 
} 
public void button_minus_click(View view){ 
    calculatorText.append("-"); 
} 

}

여기 내 XML 코드입니다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" > 

<EditText 
android:id="@+id/calculatorText" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentLeft="true" 
android:layout_alignParentTop="true" 
android:ems="10" 
android:hint="@string/calculatorText_text" /> 

<Button 
android:id="@+id/button_plus" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBaseline="@+id/button_minus" 
android:layout_alignBottom="@+id/button_minus" 
android:layout_alignParentLeft="true" 
android:hint="@string/button_plus" 
android:onClick="button_plus_click" /> 

<Button 
android:id="@+id/button_zero" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBaseline="@+id/button_plus" 
android:layout_alignBottom="@+id/button_plus" 
android:layout_toRightOf="@+id/button_plus" 
android:hint="@string/button_zero" 
android:onClick="button_zero_click" /> 

<Button 
android:id="@+id/button_minus" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_centerHorizontal="true" 
android:layout_marginBottom="135dp" 
android:hint="@string/button_minus" 
android:onClick="button_minus_click" /> 

<Button 
android:id="@+id/button_nine" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_above="@+id/button_minus" 
android:layout_alignLeft="@+id/button_minus" 
android:hint="@string/button_nine" 
android:onClick="button_nine_click" /> 

<Button 
android:id="@+id/button_eight" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_above="@+id/button_zero" 
android:layout_toLeftOf="@+id/button_minus" 
android:hint="@string/button_eight" 
android:onClick="button_eight_click" /> 

<Button 
android:id="@+id/button_seven" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBaseline="@+id/button_eight" 
android:layout_alignBottom="@+id/button_eight" 
android:layout_toLeftOf="@+id/button_eight" 
android:hint="@string/button_seven" 
android:onClick="button_seven_click" /> 

<Button 
android:id="@+id/button_six" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_above="@+id/button_nine" 
android:layout_toRightOf="@+id/button_eight" 
android:hint="@string/button_six" 
android:onClick="button_six_click" /> 

<Button 
android:id="@+id/button_five" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBaseline="@+id/button_six" 
android:layout_alignBottom="@+id/button_six" 
android:layout_toRightOf="@+id/button_seven" 
android:hint="@string/button_five" 
android:onClick="button_five_click" /> 

<Button 
android:id="@+id/button_four" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBaseline="@+id/button_five" 
android:layout_alignBottom="@+id/button_five" 
android:layout_toLeftOf="@+id/button_five" 
android:hint="@string/button_four" 
android:onClick="button_four_click" /> 

<Button 
android:id="@+id/button_three" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_above="@+id/button_six" 
android:layout_toRightOf="@+id/button_five" 
android:hint="@string/button_three" 
android:onClick="button_three_click" /> 

<Button 
android:id="@+id/button_two" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBaseline="@+id/button_three" 
android:layout_alignBottom="@+id/button_three" 
android:layout_toRightOf="@+id/button_four" 
android:hint="@string/button_two" 
android:onClick="button_two_click" /> 

<Button 
android:id="@+id/button_one" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBaseline="@+id/button_two" 
android:layout_alignBottom="@+id/button_two" 
android:layout_toLeftOf="@+id/button_two" 
android:hint="@string/button_one" 
android:onClick="button_one_click" /> 

</RelativeLayout> 

도와주세요. onCreate()setContentView() 아래 내부에 다음과 같은

+0

이 줄을 이동 calculatorText = (EditText) findViewById (R.id.calculatorText); onCreate() maethod..and EditText를 전역 적으로 선언하십시오 .. –

+3

또 다른 조기 findViewById 호출 – Selvin

답변

0

시프트 :

EditText calculatorText = (EditText) findViewById(R.id.calculatorText); 

활동이 된 setContentView 전에에서 onCreate 외부 ID로 글고 치기를 "발견"하는 식별 할 수 없습니다.

public class MainActivity extends Activity { 
EditText calculatorText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    calculatorText = (EditText) findViewById(R.id.calculatorText); 
} 

코드의 문제는 먼저 콘텐츠보기 (R.layout.activity_main)의 내부 뷰를 찾으려고한다는 것입니다하지만 당신은하지 않은 :

+0

고맙습니다 !!! – spideyonthego

+0

문제 없음, 기본 구현을 위해 더 많은 것을 배우고 시도하십시오. 다음에 downvote (s)를 피할 수 있습니다. – user2450263

0
은 다음과 같이 코드를 브레이크

해당 뷰를 인스턴스화 할 시점에서 활동의 컨텐츠 뷰를 설정하십시오!

+0

고마워, Jay – spideyonthego

0

레이아웃을 설정하기도 전에 findviewById를 호출합니다!

이 줄

EditText calculatorText = (EditText) findViewById(R.id.calculatorText); 

은 다음과 같아야합니다 후

EditText calculatorText; 

다음 :

setContentView(R.layout.activity_main); 

쓰기 :

calculatorText = (EditText) findViewById(R.id.calculatorText); 
+0

고마워, 에릭! – spideyonthego

+0

귀하는 환영합니다. 답변을 수락하고 답하십시오. – erik