2012-10-26 41 views
1

我一直花費一些時間去研究一些Google的android教程,並決定將我自己的簡單計算器應用程序放在一起。我知道很多JAVA,並且在一些SDK之前已經把一些Android搞砸了。我認爲代碼很好,但我無法讓混蛋運行。我一直在試圖找到一個基於我的LogCat東西的答案,但沒有運氣。首先,這裏是我的MainActivity.java:無法獲取簡單的android計算器應用程序運行

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> 

這是logcat的顯示,當我嘗試運行它:

/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 

我愛如果有人可以看看這個,我真的很感激它。我認爲學習android會很酷,但是因爲我無法獲得這樣一個簡單的程序來啓動而感到非常沮喪。謝謝。

回答

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 editText2; 
TextView textView1 ; 

,而不是這些

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

} 

由於您正在嘗試訪問視圖而未指定您正在考慮的佈局,因此出現錯誤。

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

您的下一個問題是,你的加,減等功能都需要採取類型查看參數的功能。這是回到點擊按鈕的引用。(否則當它找不到調用的函數時,你會得到一個IllegalStateException)

然後,它會在Float.parseFloat(editText1.getText()。toString())上失敗,因爲editText包含空格,而不是數。你需要強制編輯文本總是有一個有效的數字,或者修改你的函數來迎合空字符串。

祝你好運! :)

+0

非常感謝這個!我沒有做任何錯誤處理,因爲我只是想讓事情開始。但是,知道這些函數帶有View參數是非常好的。看起來我仍然有很多東西需要了解Android的工作原理。 – dereksalerno

1

我在這裏做了增加值。您的創建XML格式的按鈕,但沒有在Java代碼中使用.. 我們需要做的下按鈕點擊收聽我們的東西......

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)參數添加到他的函數中,並且它會正常工作。 –