2012-10-26 2 views
1

Google의 안드로이드 튜토리얼을 조금 훑어보고 내 간단한 계산기 응용 프로그램을 함께 사용하기로 결정했습니다. 나는 JAVA의 좋은 점을 알고 있고, 약간의 SDKs 전에 안드로이드 조금 돌아 다닌다. 나는 그 코드가 훌륭하다고 생각하지만, 나는 그 놈을 도망 갈 수 없다. LogCat을 기반으로 답변을 찾으려고했지만 행운이 없었습니다. 첫째, 여기 내 MainActivity.java입니다 :실행할 간단한 안드로이드 계산기 앱을 얻을 수 없다

package com.AppliedArgonautics.calculator; 

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

public class MainActivity extends Activity { 
    EditText editText1 = (EditText)findViewById(R.id.editText1); 
    EditText editText2 = (EditText)findViewById(R.id.editText2); 
    TextView textView1 = (TextView)findViewById(R.id.textView1); 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
public void Add(){ 
    float num1 = Float.parseFloat(editText1.getText().toString()); 
    float num2 = Float.parseFloat(editText2.getText().toString()); 
    float result = num1 + num2; 
    textView1.setText(Float.toString(result)); 
} 
public void Subtract(){ 
    float num1 = Float.parseFloat(editText1.getText().toString()); 
    float num2 = Float.parseFloat(editText2.getText().toString()); 
    float result = num1 - num2; 
    textView1.setText(Float.toString(result)); 
} 
public void Multiply(){ 
    float num1 = Float.parseFloat(editText1.getText().toString()); 
    float num2 = Float.parseFloat(editText2.getText().toString()); 
    float result = num1 * num2; 
    textView1.setText(Float.toString(result)); 
} 
public void Divide(){ 
    float num1 = Float.parseFloat(editText1.getText().toString()); 
    float num2 = Float.parseFloat(editText2.getText().toString()); 
    float result = num1/num2; 
    textView1.setText(Float.toString(result)); 
} 
public void Clear(){ 
    editText1.setText(""); 
    editText2.setText(""); 
    textView1.setText(""); 
} 
} 

내 매니페스트 파일 : 다음

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.AppliedArgonautics.calculator" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

, 이것은 내가 실행하려고하면 로그 캣 보여줍니다 무엇인가 activity_main.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" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="32dp" 
     android:onClick="Add" 
     android:text="Add" /> 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/button1" 
     android:layout_below="@+id/button1" 
     android:layout_marginTop="45dp" 
     android:onClick="Multiply" 
     android:text="Multiply" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/button3" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="28dp" 
     android:onClick="Subtract" 
     android:text="Subtract" /> 

    <Button 
     android:id="@+id/button4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/button3" 
     android:layout_alignBottom="@+id/button3" 
     android:layout_alignLeft="@+id/button2" 
     android:onClick="Divide" 
     android:text="Divide" /> 

    <Button 
     android:id="@+id/button5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/button1" 
     android:layout_centerHorizontal="true" 
     android:onClick="Clear" 
     android:text="Clear" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignRight="@+id/button1" 
     android:layout_marginTop="37dp" 
     android:ems="10" 
     android:inputType="phone" > 

     <requestFocus /> 
    </EditText> 

    <EditText 
     android:id="@+id/editText2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/editText1" 
     android:layout_alignLeft="@+id/button2" 
     android:layout_alignParentRight="true" 
     android:layout_alignTop="@+id/editText1" 
     android:ems="10" 
     android:inputType="phone" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/button5" 
     android:layout_below="@+id/editText1" 
     android:layout_marginTop="56dp" 
     android:text="TextView" /> 

</RelativeLayout> 

그것 :

/Trace (3186): error opening trace file: No such file or directory (2) 
D/AndroidRuntime(3186): Shutting down VM 
W/dalvikvm(3186): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
E/AndroidRuntime(3186): FATAL EXCEPTION: main 
E/AndroidRuntime(3186): java.lang.RuntimeException: Unable to instantiate activity   ComponentInfo{com.AppliedArgonautics.calculator/com.AppliedArgonautics.calculator.MainActivi ty}: java.lang.NullPointerException 
E/AndroidRuntime(3186): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983) 
E/AndroidRuntime(3186): at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
E/AndroidRuntime(3186): at  android.app.ActivityThread.access$600(ActivityThread.java:130) 
E/AndroidRuntime(3186): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
E/AndroidRuntime(3186): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(3186): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(3186): at android.app.ActivityThread.main(ActivityThread.java:4745) 
E/AndroidRuntime(3186): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(3186): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(3186): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
E/AndroidRuntime(3186): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
E/AndroidRuntime(3186): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(3186): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(3186): at android.app.Activity.findViewById(Activity.java:1825) 
E/AndroidRuntime(3186): at com.AppliedArgonautics.calculator.MainActivity.<init>(MainActivity.java:10) 
E/AndroidRuntime(3186): at java.lang.Class.newInstanceImpl(Native Method) 
E/AndroidRuntime(3186): at java.lang.Class.newInstance(Class.java:1319) 
E/AndroidRuntime(3186): at android.app.Instrumentation.newActivity(Instrumentation.java:1053) 
E/AndroidRuntime(3186): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974) 
E/AndroidRuntime(3186): ... 11 more 
W/ActivityManager( 160): Force finishing activity com.AppliedArgonautics.calculator/.MainActivity 

내가 woul 누군가가 이것을 볼 수 있다면 정말 고마워. 나는 안드로이드를 배우는 것이 멋지다고 생각했지만 이처럼 간단한 프로그램조차도 사용할 수 없다는 것에 매우 좌절감을 느낍니다. 고맙습니다.

답변

3

코드에서 문제가 많이있을 수 있습니다,하지만 당신이 얻을 처음 시작 :

는 인스턴스 변수로 EditTextTextView을 만듭니다. 해당 변수에보기를 onCreate에 할당하십시오.

public class MainActivity extends Activity { 
     EditText editText1; 
     EditText editText2; 
     TextView textView1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    editText1 = (EditText)findViewById(R.id.editText1); 
    editText2 = (EditText)findViewById(R.id.editText2); 
    textView1 = (TextView)findViewById(R.id.textView1); 
    } 
......... 
} 
0

대신 이러한

EditText editText1 = (EditText)findViewById(R.id.editText1); 
EditText editText2 = (EditText)findViewById(R.id.editText2); 
TextView textView1 = (TextView)findViewById(R.id.textView1); 

이러한

EditText editText1; 
EditText editText2; 
TextView textView1 ; 

물품이

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

01 변경할

고려중인 레이아웃을 지정하지 않고보기에 액세스하려고하므로 오류가 발생했습니다.

setContentView(R.layout.activity_main); 

내가 응용 프로그램을로드하고 디버그 모드에서 응용 프로그램을 실행하면

1

을 고려하고있는 레이아웃을 지정합니다. 그것은 라인에서 깨졌습니다.

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

아직 레이아웃을로드하지 않았으므로 널 포인터 예외가 발생했습니다. 이것은 OnCreate 함수에서 발생합니다. 해결책은 SetContentView 명령 다음에 findViewById 명령을 onCreate 함수로 이동하는 것입니다. 즉 :

public class MainActivity extends Activity { 
    EditText editText1; 
    EditText editText2; 
    TextView textView1; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editText1 = (EditText)findViewById(R.id.editText1); 
    editText2 = (EditText)findViewById(R.id.editText2); 
    textView1 = (TextView)findViewById(R.id.textView1); 
} 

다음 문제는 추가, 빼기 등의 모든 함수가 View 유형의 매개 변수를 사용해야한다는 것입니다. 이것은 클릭 된 버튼에 대한 참조입니다.(그렇지 않으면 호출 할 함수를 찾을 수 없을 때 IllegalStateException이 발생합니다.)

그런 다음 editText에 공백이 포함되어 있기 때문에 Float.parseFloat (editText1.getText(). toString())에 실패합니다. 번호. 편집 텍스트가 항상 유효한 숫자를 갖도록하거나 빈 문자열을 처리하도록 함수를 수정해야합니다.

여기에서 행운을 빌어 요! :)

+0

덕분에 많은 당신을 도와줍니다! 나는 오류 처리를 전혀하지 않았다. 단지 시작하는 것이기 때문에. 그러나 이러한 함수가 View 매개 변수를 사용한다는 것을 아는 것은 매우 좋았습니다. 나는 아직도 안드로이드가 어떻게 작동 하는지를 배울 것이 많다. – dereksalerno

1
나는 값을 추가 여기를했다

..하지만, 자바 코드에서 사용하지 않는 XML에 대한 여러분의 생성 버튼 .. 우리가 버튼 클릭 리스너에서 우리 물건을 할 필요가 ...

public class MainActivity extends Activity { 
    EditText editText1 ; 
    EditText editText2 ; 
    TextView textView1 ; 
    float num1, num2,result; 
    Button add; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editText1 = (EditText)findViewById(R.id.editText1); 
    editText2 = (EditText)findViewById(R.id.editText2); 
    textView1 = (TextView)findViewById(R.id.textView1); 
    add = (Button)findViewById(R.id.button1); 
    add.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      num1 = Float.parseFloat(editText1.getText().toString()); 
      num2 = Float.parseFloat(editText2.getText().toString()); 
      result = num1 + num2; 
      textView1.setText(Float.toString(result)); 
     } 
    }); 
} 


} 

... 모든 방법에 대해

희망 같은 일을 적용,이 뜻은 .. 이것에 대한

+1

버튼 청취자를 명시 적으로 코드에 추가하지 않아도 안된다. 그가해야 할 일은 (View v) 매개 변수를 그의 함수에 추가하면 잘 작동합니다. –

관련 문제