2012-10-26 42 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)参数添加到他的函数中,并且它会正常工作。 –