Android应用中的按钮按下会导致出现错误

时间:2014-01-09 09:39:25

标签: android view casting

我是Android开发的新手,并且一直在尝试使用初学者的教程作为开发简单应用程序的起点。有一个屏幕,一个图像,一排四个按钮,一个供用户输入图钉的文本框,以及一个显示结果的文本视图。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linear_layout_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
       android:id="@+id/imageView1"
       android:contentDescription="@string/image"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
        android:src="@drawable/skytrek"
       />

    <LinearLayout
    android:id="@+id/linear_layout_2"
        android:layout_width="wrap_content"
       android:layout_height="wrap_content"
        android:orientation="horizontal" >

                <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="@string/button_today"
        android:onClick="today_click" />

            <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="@string/button_tomorrow"
        android:onClick="tomorrow_click" /> 

            <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="@string/button_this_week"
        android:onClick="this_week_click" /> 

          <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="@string/button_next_week"
        android:onClick="next_week_click" />
    </LinearLayout>

        <EditText android:id="@+id/editText1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:hint="@string/edit_message" />

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/init_message"/>


</LinearLayout>

我有代码可以根据按下的按钮提供我想要的结果 - 一切都很好。但后来我希望用户输入PIN以及按下按钮,所以我添加了EditText控件。这引发了以下错误:

E/AndroidRuntime(28578): Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditText

我的Java类:

private String content = null;  
private TextView textView1;
private EditText editText1;

public void today_click(View view) {
    getPage("today");
}
public void tomorrow_click(View view) {
    getPage("tomorrow");
}
public void this_week_click(View view) {
    getPage("thisweek");
}
public void next_week_click(View view) {
    getPage("nextweek");
}

public void getPage(String strParam) {

    editText1 = (EditText) findViewById(R.id.editText1);
    String message = editText1.getText().toString();

    if (message.equals("4567")) {

                content = "PIN recognised";
    } else {
        content = "PIN not recognised";
    }
    textView1 = (TextView) findViewById(R.id.textView1);
    textView1.setText(content);
}

我以为我做了一些愚蠢的事情,使用TextView的名称而不是EditText控件,但是如果有的话,我找不到它。

该行

正在抛出错误
getPage("thisweek");

我不明白这一行如何涉及任何种类的观点,当然还有函数标题

this_week_click(View view)

确实如此,当我更改XML文件中的TextView和EditText的顺序时(以便TextView首先出现),错误消失了。就好像传递的“视图”不是按钮,而是按钮的最近的小部件。我已经阅读了

existence of parameter (View view)

但它似乎只是证实我(错误)理解按钮应作为视图参数传递。我也尝试过清理项目,并建立一个全新的项目。究竟是什么导致了铸造错误?

4 个答案:

答案 0 :(得分:5)

如果您正在使用Eclipse,请转到菜单语音&#34; Project&#34;并选择&#34;清洁&#34;

有时Eclipse有一些问题,通过清理你重新生成它们的项目..

答案 1 :(得分:2)

每次如果你在xml中进行任何更改或在xml中更改视图位置或更改id,你都需要清理构建你的项目。如果没有,你将得到这个例外。

答案 2 :(得分:1)

您好我已经测试了您的代码,您的代码很好。请从

清理您的项目

选择您的项目,然后单击“项目”,然后单击“清理”,同时选中“自动构建”。您的自动生成的类R未正确生成。

答案 3 :(得分:0)

尝试清理项目并再次运行.. Eclipse - &gt;项目菜单 - &gt;清洁

这是因为当我们在xml文件中玩游戏时,eclipse会感到困惑;)