使用函数清除TextViews并将Button设置为禁用会导致应用程序崩溃

时间:2013-12-17 15:10:29

标签: android function button onclicklistener

与标题中一样,我有一个清除许多字段并将按钮设置为禁用的功能。然而,当我点击按钮时,应用程序崩溃了。我注释掉了在交换机中调用该函数的行,并验证了应用程序不再崩溃,演绎告诉我问题是在函数内发生的。我可能错了。请参阅以下代码:

final View calcbtn = findViewById(R.id.calcbtn);
final View clrbtn = findViewById(R.id.clrbtn);
final View abtbtn =  findViewById(R.id.abtbtn);
calcbtn.setOnClickListener((OnClickListener) this);
clrbtn.setOnClickListener((OnClickListener) this);
abtbtn.setOnClickListener((OnClickListener) this);

这些是上面的定义,我将它们链接到屏幕元素。我相信这是正确的,因为当我使用代码时:

calcbtn = (Button) findViewById(R.id.calcbtn);

我收到有关该项目的错误不适用于Actvity Main。设置所有这些我已经得到计算和约按钮才能正常工作,并将“implements OnClickListener”添加到extends活动中。 下面我有我认为给我这个问题的功能:

public void clrbtn (){
    billtotal.setText("");
    billtotal.requestFocus();
    numofpep.setText("");
    tv.setText("$0.00");
    calcbtn.setEnabled(false);
}

和调用该函数的开关。 (这是第二个案例......)

@Override
public void onClick(View v) {
    switch(v.getId()){
        case R.id.calcbtn:
            calculate();
        break;
        case R.id.clrbtn:
            //clrbtn();
        break;
        case R.id.abtbtn:
           abtbtn();
        break;
    }
}

我正在努力使我的代码尽可能紧密,以便我不仅可以拥有一个好的应用程序,而且还可以使我的编码技术尽可能干净和顺从。任何和所有的帮助表示赞赏。我对所有建议持开放态度。

LogCat捕获错误:

12-17 15:26:16.395: D/gralloc_goldfish(10982): Emulator without GPU emulation detected.
12-17 15:26:29.825: D/AndroidRuntime(10982): Shutting down VM
12-17 15:26:29.825: W/dalvikvm(10982): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
12-17 15:26:29.864: E/AndroidRuntime(10982): FATAL EXCEPTION: main
12-17 15:26:29.864: E/AndroidRuntime(10982): java.lang.NullPointerException
12-17 15:26:29.864: E/AndroidRuntime(10982):    at com.vertygoeclypse.tipcalc.MainActivity.reset(MainActivity.java:146)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at com.vertygoeclypse.tipcalc.MainActivity.onClick(MainActivity.java:162)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at android.view.View.performClick(View.java:4204)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at android.view.View$PerformClick.run(View.java:17355)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at android.os.Handler.handleCallback(Handler.java:725)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at android.os.Looper.loop(Looper.java:137)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at android.app.ActivityThread.main(ActivityThread.java:5041)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at java.lang.reflect.Method.invokeNative(Native Method)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at java.lang.reflect.Method.invoke(Method.java:511)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-17 15:26:29.864: E/AndroidRuntime(10982):    at dalvik.system.NativeStart.main(Native Method)
12-17 15:26:30.004: D/dalvikvm(10982): GC_CONCURRENT freed 113K, 9% free 2679K/2940K, paused 8ms+6ms, total 173ms

我从Null指针看到致命异常,但是对环境不熟悉并且试图学习不确定从logcat错误中查看的位置。

请在下面找到屏幕项目的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background= "#DDFFDD" 
android:orientation="vertical"
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" >
<View
            android:layout_width="fill_parent"
            android:layout_height= "20dip"
            android:background= "#DDFFDD"
            android:layout_marginTop= "5dip"
            android:layout_marginBottom= "5dip" 
/>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal">

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:checkedButton="@+id/rb0per">

        <RadioButton
            android:id="@+id/rb0per"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="@string/_0_tip" />

        <RadioButton
            android:id="@+id/rb5per"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/_5_tip"  />

        <RadioButton
            android:id="@+id/rb10per"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/_10_tip"  />

 <TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:text="@string/tiplabel" />

    </RadioGroup>



    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right" >
    <TableRow
            android:id="@+id/tableRow1"
           android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="left" >

        <EditText
            android:id="@+id/billtotal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="100"
            android:gravity="right"
            android:hint="@string/bill_total"
            android:inputType="numberDecimal"
            android:textSize="28sp"
            android:cursorVisible="false" >

            <requestFocus />
        </EditText>
         </TableRow>
        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:gravity="right" >                
            <TextView
                android:id="@+id/billtotlabel"
                android:layout_width="fill_parent"
                android:layout_weight="100"
                android:layout_height="wrap_content"
                android:text="@string/bill_total_label" 
                android:gravity="right"/>

        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:gravity="right" >

            <EditText
                android:id="@+id/pertotal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="100"
                android:gravity="right"
                android:hint="@string/no_of_people"
                android:inputType="number"
                android:textSize="28sp"
                android:cursorVisible="false"  />

        </TableRow>

        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:gravity="right" >

            <TextView
                android:id="@+id/pertotalabel"
                android:layout_width="fill_parent"
                android:layout_weight="100"
                android:layout_height="wrap_content"
                android:text="@string/number_of_persons_label"
                android:gravity="right"/>

        </TableRow>

    </TableLayout>

</LinearLayout>


<View
            android:layout_width="fill_parent"
            android:layout_height= "20dip"
            android:background= "#DDFFDD"
            android:layout_marginTop= "5dip"
            android:layout_marginBottom= "5dip" 
/>


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal" >

    <Button
        android:id="@+id/calcbtn"
        android:layout_width="0dip"
        android:layout_weight="33"
        android:layout_height="wrap_content"
        android:textSize="15sp"
        android:text="@string/calculate_button_label" />

    <Button
        android:id="@+id/clrbtn"
        android:layout_width="0dip"
        android:layout_weight="33"
        android:layout_height="wrap_content"
        android:text="@string/clear_button_label"
        android:textSize="15sp" />

    <Button
        android:id="@+id/abtbtn"
        android:layout_width="0dip"
        android:layout_weight="33"
        android:layout_height="wrap_content"
        android:textSize="15sp"
        android:text="@string/about_button_label" />
</LinearLayout>
<View
            android:layout_width="fill_parent"
            android:layout_height= "10dip"
            android:background= "#DDFFDD"
            android:layout_marginTop= "5dip"
            android:layout_marginBottom= "5dip" 
/>
<TextView
    android:id="@+id/totalview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:gravity="center"
    android:hint="@string/per_person_amount_label"
    android:text="@string/dollarvalue"
    android:textSize="28sp"
    android:textStyle="bold" />
<View
            android:layout_width="fill_parent"
            android:layout_height= "20dip"
            android:background= "#DDFFDD"
            android:layout_marginTop= "5dip"
            android:layout_marginBottom= "5dip" 
/>

<TextView
   android:id="@+id/textView6"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   android:gravity="center"
   android:text="@string/each_pays_label"
   android:textAlignment="center"
   android:textSize="28sp" />

</LinearLayout>

这些是屏幕元素的定义:

    // Linking the definitions with the on screen widgets
    final View calcbtn = findViewById(R.id.calcbtn);
    final View clrbtn = findViewById(R.id.clrbtn);
    final View abtbtn =  findViewById(R.id.abtbtn);
    calcbtn.setOnClickListener((OnClickListener) this);
    clrbtn.setOnClickListener((OnClickListener) this);
    abtbtn.setOnClickListener((OnClickListener) this);
    tv = (TextView) findViewById(R.id.totalview);
    numofpep = (EditText) findViewById(R.id.pertotal);
    billtotal = (EditText) findViewById(R.id.billtotal);
    tiprdogrp = (RadioGroup) findViewById(R.id.radioGroup1);

我希望格式化正常。

1 个答案:

答案 0 :(得分:0)

似乎答案就在我面前,在Mark的帮助下,我查看了logcat输出并确定以下行是发生错误的地方:

    12-17 15:26:29.864: E/AndroidRuntime(10982):    at com.vertygoeclypse.tipcalc.MainActivity.reset(MainActivity.java:146)
    12-17 15:26:29.864: E/AndroidRuntime(10982):    at com.vertygoeclypse.tipcalc.MainActivity.onClick(MainActivity.java:162)

话虽如此,我调查了有问题的2行,第162行是对重置或清除功能的调用:

        case R.id.clrbtn:
    reset();
    break;

第146行是函数中的一个项目:

    calcbtn.setEnabled(True);

一旦该行被删除,问题就解决了,应用程序开始按原样运行,我试图让应用程序崩溃,到目前为止它已经稳定了。谢谢大家的帮助和指导。我希望这有助于其他人,一旦我检查了逻辑,我将编辑它以将推理置于错误背后,如果有人可以帮助解决那些很好的逻辑但问题现在已经解决了。

再次感谢所有人的帮助。