2014-01-25 88 views
1

我跟着this youtube tutorial 创建一个基本的计算应用程序。基本计算应用程序崩溃

我能在我的手机上调试它,它运行良好。但是,当我插入数字并按计算,应用程序冻结和崩溃。

这是我的布局:

<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:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <TextView 
     android:id="@+id/lblTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="66dp" 
     android:text="Basic Calculate" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/display" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/btnCalculate" 
     android:layout_below="@+id/btnCalculate" 
     android:layout_marginTop="23dp" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/num" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/btnCalculate" 
     android:layout_alignLeft="@+id/btnCalculate" 
     android:layout_marginBottom="20dp" 
     android:ems="5" 
     android:inputType="numberDecimal|numberSigned" /> 

    <Button 
     android:id="@+id/btnCalculate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="Calculate" /> 

</RelativeLayout> 

这是我的Activity类:

package com.danielkim.danielkimcalculator; 

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

public class MainActivity extends Activity { 

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

     Button calc = (Button)findViewById(R.id.btnCalculate); 

     calc.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) 
      { 
       EditText number = (EditText)findViewById(R.id.num); 
       TextView display = (TextView)findViewById(R.id.display); 

       double num = Double.parseDouble(number.getText().toString()); 

       num = Double.parseDouble(samplecalc.multNum(num)); 

       display.setText(num + ""); 
      } 
     }); 
    } 

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

这是我samplecalc类做了计算:

package com.danielkim.danielkimcalculator; 

public class samplecalc { 
    private double Num = 0; 

    public samplecalc(double number) { 
     Num = number; 
    } 

    public static String multNum(double x) { 
     String re = ""; 

     double num = x * 5; 

     re = num + ""; 

     return re; 
    } 

    public double multNum2() { 
     double re = Num * 5; 

     return re; 
    } 
} 

的logcat的说:

01-24 18:56:59.760: I/Adreno200-EGLSUB(12532): <ConfigWindowMatch:2081>: Format RGBA_8888. 
01-24 18:57:29.640: W/dalvikvm(12532): threadid=1: thread exiting with uncaught exception (group=0x40acc1f8) 
01-24 18:57:29.650: E/AndroidRuntime(12532): FATAL EXCEPTION: main 
01-24 18:57:29.650: E/AndroidRuntime(12532): java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditText 
01-24 18:57:29.650: E/AndroidRuntime(12532): at com.danielkim.danielkimcalculator.MainActivity$1.onClick(MainActivity.java:23) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at android.view.View.performClick(View.java:3511) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at android.view.View$PerformClick.run(View.java:14105) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at android.os.Handler.handleCallback(Handler.java:605) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at android.os.Looper.loop(Looper.java:137) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at android.app.ActivityThread.main(ActivityThread.java:4429) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at java.lang.reflect.Method.invokeNative(Native Method) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at java.lang.reflect.Method.invoke(Method.java:511) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
01-24 18:57:29.650: E/AndroidRuntime(12532): at dalvik.system.NativeStart.main(Native Method) 
+0

尝试清洗和重新执行? – PopoFibo

+1

嘿,这是我做了视频。尝试再次运行它。输入'5'并进行计算。 LogCat之后是否一样? –

+0

在clicklistners或其他事件侦听器中定义对象并不是一件好事,但这可能不是问题,但您最好纠正它以更好地使用您的代码。 – user2469133

回答

1

看起来您正在投射正确。但编译器仍然抱怨错误的演员。

java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditText 

我相信这是EditText number = (EditText)findViewById(R.id.num); 我会尝试清理项目项目 - >清除,如果你使用的是Eclipse。像这样的故障可能会发生,我发现的最简单的解决方案是清理项目并再次运行。

与此问题相关的其他主题:

  1. android.widget.TextView cannot be cast to android.widget.EditView
  2. java.lang.ClassCastException: android.widget.TextView cannot be cast
  3. java.lang.ClassCastException: android.widget.ImageButton cannot be cast..
  4. ClassCastException: android.widget.EditText