2014-04-07 2 views
0

주요 활동에는 다양한 활동을위한 버튼이 있습니다. 버튼을 클릭하자마자 하나의 활동 인 계산기가 닫힙니다. 다른 활동은 잘 작동합니다.버튼을 클릭하여이 활동을 엽니 다. 닫습니다.

활동에 대한 XML 파일이 질문은

<AbsoluteLayout android:id="@+id/widget0" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<TextView android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="ADDITION OF NUMBERS" 
android:id="@+id/textView1" 
android:layout_x="73dip" 
android:layout_y="28dip"></TextView> 

<TextView android:layout_width="wrap_content" 
android:layout_x="36dip" 
android:layout_height="wrap_content" 
android:text="First Amount" 
android:id="@+id/textView2" 
android:layout_y="80dip"></TextView> 

<EditText android:text="" 
android:layout_width="wrap_content" 
android:layout_x="172dip" 
android:id="@+id/amount1" 
android:layout_height="wrap_content" 
android:layout_y="62dip"></EditText> 

<TextView android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Second Amount" 
android:id="@+id/textView3" 
android:layout_x="36dip" 
android:layout_y="169dip"></TextView> 

<EditText android:text="" 
android:layout_width="wrap_content" 
android:layout_x="169dip" 
android:id="@+id/amount2" 
android:layout_height="wrap_content" 
android:layout_y="152dip"></EditText> 

<Button android:layout_width="wrap_content" 
android:id="@+id/calculate" 
android:layout_x="41dip" 
android:layout_height="wrap_content" 
android:text="Calculate" 
android:layout_y="232dip"></Button> 

<EditText android:text="" 
android:layout_width="wrap_content" 
android:layout_x="172dip" 
android:id="@+id/tt" 
android:layout_height="wrap_content" 
android:layout_y="232dip"></EditText> 

</AbsoluteLayout> 

자바 파일은 다음과 같습니다

package com.example.welderhelper; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Button; 
import android.view.View; 


public class Calculators extends ActionBarActivity 
{ 
    EditText amount1; 
    EditText amount2; 
    TextView tt; 
    Button calculate; 
    double x=0; 
    double y=0; 
    double z=0; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_calculators); 
     initControls(); 
    } 
    private void initControls() 
    { 
     amount1=(EditText)findViewById(R.id.amount1); 
     amount2=(EditText)findViewById(R.id.amount2); 
     tt=(TextView)findViewById(R.id.tt); 
     calculate=(Button)findViewById(R.id.calculate); 
     calculate.setOnClickListener(new Button.OnClickListener() 
     {public void onClick 
     (View v) { calculate();}}); 
    } 
    private void calculate() 
    { 
     x=Double.parseDouble(amount1.getText().toString()); 
     y=Double.parseDouble(amount2.getText().toString()); 
     z=x+y; 
     tt.setText(Double.toString(z)); 
    } 
} 

내가 참조, http://www.techillumination.in/2010/02/simple-android-application-for-adding.html으로 사용하려고했지만, 그것을하지 않았다 작업. 따라서 복사하고 붙여 넣은 후에도 활동 이름을 변경하더라도 여전히 작동하지 않습니다. 나는 길을 잃어 버렸습니다. 2 개의 숫자를 취하여 함께 추가하는 것으로 가정합니다. 어떤 도움을 주셔서 감사합니다.

편집 : 여기에 로그 캣은 다음과 같습니다

당신이 parseDouble() 방법 중 하나가 NumberFormatException을 던지고 호출하기 때문에 계산 표시된 버튼을 누른 후 앱 충돌, 그것은 아마 것을 의미하는 경우
04-06 19:35:50.286: V/Activity(4144): onPause [email protected] 
04-06 19:35:50.306: V/Activity(4144): onCreate [email protected]: null 
04-06 19:35:50.336: D/AndroidRuntime(4144): Shutting down VM 
04-06 19:35:50.336: W/dalvikvm(4144): threadid=1: thread exiting with uncaught exception (group=0x41dd0700) 
04-06 19:35:50.336: E/AndroidRuntime(4144): FATAL EXCEPTION: main 
04-06 19:35:50.336: E/AndroidRuntime(4144): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.welderhelper/com.example.welderhelper.Calculators}: java.lang.NullPointerException 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2340) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.app.ActivityThread.access$600(ActivityThread.java:153) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.os.Looper.loop(Looper.java:137) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.app.ActivityThread.main(ActivityThread.java:5290) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at java.lang.reflect.Method.invoke(Method.java:525) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at dalvik.system.NativeStart.main(Native Method) 
04-06 19:35:50.336: E/AndroidRuntime(4144): Caused by: java.lang.NullPointerException 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at com.example.welderhelper.Calculators.initControls(Calculators.java:34) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at com.example.welderhelper.Calculators.onCreate(Calculators.java:26) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.app.Activity.performCreate(Activity.java:5243) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294) 
04-06 19:35:50.336: E/AndroidRuntime(4144):  ... 11 more 
04-06 19:35:51.527: I/Process(4144): Sending signal. PID: 4144 SIG: 9 
+2

그리고 ... 로그 캣 ... 오류에

calculate.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ calculate(); } }); 

...? –

+0

방금 ​​레이아웃 파일을 가져 와서 initControls() 메소드를 구현합니다. 그것은 나를 위해 잘 작동합니다. 깨끗하고 빌드하십시오. 그런 다음 철자를 확인하십시오. NullPointerException은 호출 된 버튼을 의미합니다. calculate가 호출 될 때 올바르게 초기화되지 않습니다. –

답변

0

당신의 로그 캣에

Caused by: java.lang.NullPointerException 
04-06 19:35:50.336: E/AndroidRuntime(4144): at com.example.welderhelper.Calculators.initControls(Calculators.java:34) 

뭔가 라인 (34)에 null입니다 initControls()이 라인

calculate.setOnClickListener(new Button.OnClickListener() 

에게로 나타나는하는 는 id이인 activity_calculators.xmlButton이 없음을 의미합니다.. 게시 한 xml은 처음 Activity이고 게시 한 xml이 아니며 게시 한 xml에 java 파일의 해당 id이 없기 때문에 게시 한 것으로 보입니다. 참조하려는 idactivity_calculators.xml이어야합니다.

편집

좋아, 정말 더 많은 관심을 지불 할 필요가있다. 그 id은 xml에 게시되어 있으므로 activity_calculators.xml이 아니거나 프로젝트를 정리하고 다시 작성해야합니다.

+0

게시 한 XML은 fragment_calculators.xml입니다. 그것은 내가 모든 액티비티를위한 모든 코드를 넣었던 부분이다. 나는 또한 깨끗한 짓을하고 다시 만들었고 효과가 없었다. – peedeefish

+0

게시물에 해당 내용을 포함 시켰어야합니다. 여기 조각을 사용하고 있습니까? – codeMagic

+0

죄송합니다, 예,이 XML 파일은 fragment_calculators.xml입니다. java 파일은 Calculators.java – peedeefish

1

. 지금처럼 calculate() 방법을 변경 :이 두 라인에서

private void calculate() 
{ 
    try 
    { 
     x = Double.parseDouble(amount1.getText().toString()); 
     y = Double.parseDouble(amount2.getText().toString()); 
     z = x + y; 
     tt.setText(Double.toString(z)); 
    } 
    catch (NumberFormatException e) 
    { 
     tt.setText("Invalid input"); 
    } 
} 
+0

버튼을 클릭하면 주 활동에서이 활동이 열리고 앱이 종료되지만이 코드를 추가 한 후에 만 ​​시작됩니다. 주요 활동의 다른 모든 버튼이 작동합니다. 나는 당신의 코드를 시도했지만 여전히 닫혔다. 고맙습니다. – peedeefish

+0

맞습니다. 방금 게시 한 logcat을 보았습니다. 당신의 Button'calculate'가 null 인 것 같습니다. 코드가 레이아웃 xml 파일에 정확하게 있는지 확인하십시오. 예를 들어 코드에있는 정확한 ID를 사용하십시오. –

+0

난 그냥 프로젝트를 청소하고 다시 만들어야한다고 생각해. 방금 복사 한/붙여 넣은 코드 및 그대로 작동합니다. –

0

변경 시도

calculate.setOnClickListener(new View.OnClickListener(){ 
    public void onClick(View v){ 
     calculate(); 
    } 
}); 
+0

같은 결과, 앱이 중지되었습니다. – peedeefish

관련 문제