【问题标题】:cast exception android.widget.TextView转换异常 android.widget.TextView
【发布时间】:2014-09-16 19:32:01
【问题描述】:

我是 android 开发新手,在尝试创建可编辑的 TextView 时遇到了以下异常。

这是异常的完整堆栈跟踪

09-17 01:25:14.749: E/AndroidRuntime(8436): FATAL EXCEPTION: main
09-17 01:25:14.749: E/AndroidRuntime(8436): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.timer/com.example.timer.TimerHomeActivity}: java.lang.ClassCastException: android.widget.TextView
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.os.Looper.loop(Looper.java:130)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.app.ActivityThread.main(ActivityThread.java:3687)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at java.lang.reflect.Method.invokeNative(Native Method)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at java.lang.reflect.Method.invoke(Method.java:507)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at dalvik.system.NativeStart.main(Native Method)
09-17 01:25:14.749: E/AndroidRuntime(8436): Caused by: java.lang.ClassCastException: android.widget.TextView
09-17 01:25:14.749: E/AndroidRuntime(8436):     at com.example.timer.TimerHomeActivity.onCreate(TimerHomeActivity.java:23)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-17 01:25:14.749: E/AndroidRuntime(8436):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
09-17 01:25:14.749: E/AndroidRuntime(8436):     ... 11 more

这是代码:

public class TimerHomeActivity extends Activity implements OnClickListener {

   public void onClick(View v) {
     TextView tv = (TextView)findViewById(R.id.timer_1);
     tv.setText("Hi");
   }
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.timer_home);
      Button timer1 = (Button)findViewById(R.id.timer_1);
      timer1.setOnClickListener(this);
   }  
}

【问题讨论】:

  • TextView tv = (TextView)findViewById(R.id.timer_1);按钮 timer1 = (Button)findViewById(R.id.timer_1);也许这就是问题所在? Button 和 TextView 都具有相同的 id

标签: java android fatal-error classcastexception


【解决方案1】:

检查您的资源 ID。您正在加载相同的资源 ID 两次,一次将其转换为 TextView,一次转换为 Button

TextView tv = (TextView)findViewById(R.id.timer_1);

Button timer1 = (Button)findViewById(R.id.timer_1);

它应该对应一个小部件,另一个会抛出一个ClassCastException

由于在启动活动时发生异常,因此导致异常的语句应该是onCreate方法中的语句。这意味着资源 timer_1 不是 Button 而是 TextView(如异常消息中所示,顺便说一下,您的帖子中似乎被截断了)。

【讨论】:

  • 问题似乎出在 Button timer1 = (Button)findViewById(R.id.timer_1);即使 TextView tv = (TextView)findViewById(R.id.timer_1);被删除,同样的异常被抛出。
  • 如果您发布更多异常堆栈跟踪信息会有所帮助。
  • 我已经发布了完整的堆栈跟踪。
  • @Jasher 这是因为 timer_1 是一个文本视图,所以当你将它转换为 Button 时,你会得到异常。检查资源 xml 中的 timer_1 并确保使用正确的 ids-
  • 不能TextView 转换为Button,但是,您可以将clicklistener 添加到TextView(或任何@987654334 @),或将 Button 转换为 TextView (Button 扩展 TextView)
猜你喜欢
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2019-05-08
  • 1970-01-01
相关资源
最近更新 更多