与标题中一样,我有一个清除许多字段并将按钮设置为禁用的功能。然而,当我点击按钮时,应用程序崩溃了。我注释掉了在交换机中调用该函数的行,并验证了应用程序不再崩溃,演绎告诉我问题是在函数内发生的。我可能错了。请参阅以下代码:
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);
我希望格式化正常。
答案 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);
一旦该行被删除,问题就解决了,应用程序开始按原样运行,我试图让应用程序崩溃,到目前为止它已经稳定了。谢谢大家的帮助和指导。我希望这有助于其他人,一旦我检查了逻辑,我将编辑它以将推理置于错误背后,如果有人可以帮助解决那些很好的逻辑但问题现在已经解决了。
再次感谢所有人的帮助。