我试图找出这段代码不起作用的方式。
最后一行给我一个警告
“不要集中用设置文本显示的文本”。
非常感谢任何帮助。
public class RegistrationActivity extends AppCompatActivity {
double costPerAthlete=725.00;
int numberOfAthletes;
double totalCost;
String locationChoice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);
final EditText tickets = (EditText) findViewById(R.id.txtTickets);
final Spinner location = (Spinner) findViewById(R.id.txtLocation);
Button cost = (Button) findViewById(R.id.btnCost);
cost.setOnClickListener(new View.OnClickListener() {
final TextView result = ((TextView) findViewById(R.id.txtResult));
@Override
public void onClick(View view) {
numberOfAthletes = Integer.parseInt(tickets.getText( ).toString( ));
totalCost = costPerAthlete * numberOfAthletes;
DecimalFormat currency = new DecimalFormat("$###,###.###");
locationChoice = location.getSelectedItem( ).toString( );
result.setText("Cost for" + locationChoice + "is" + currency.format(totalCost));
}
});
}
}
XML文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.matt.triathlon.RegistrationActivity"
tools:showIn="@layout/activity_registration">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txtTitle"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="32sp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editText"
android:layout_below="@+id/textView"
android:hint="@string/txtTickets"
android:textSize="22sp"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView"
android:layout_alignLeft="@+id/textView"
android:layout_alignStart="@+id/textView" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtLocation"
android:layout_below="@+id/editText"
android:layout_centerHorizontal="true"
android:spinnerMode="dialog"
android:entries="@array/txtLocation"
android:focusableInTouchMode="false"
android:prompt="@string/prompt" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/triathalon"
android:src="@drawable/triathalon"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:contentDescription="@string/description" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btnCost"
android:id="@+id/button"
android:textSize="28sp"
android:layout_below="@+id/triathalon"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button"
android:layout_centerHorizontal="true"
android:id="@+id/txtResult"
android:textSize="22sp" />
</RelativeLayout>
这些是我的日志
E/AndroidRuntime: FATAL EXCEPTION:
main Process: com.matt.triathlon, PID: 2188 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matt.triathlon/com.matt.triathlon.RegistrationActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
答案 0 :(得分:2)
布局中按钮的ID为android:id="@+id/button"
,而不是android:id="@+id/btnCost"
。
这就是你得到NullPointerException的原因。
请更改XML以使用正确的ID,或将Java代码更改为
Button cost = (Button) findViewById(R.id.button);
答案 1 :(得分:0)
更改
MALLOC_CONF
到
Button cost = (Button) findViewById(R.id.btnCost);
最好让你拥有自己的xmls并遵循id的约定 我使用tvName(tv_name),btnLogin(btn_login)等,这样我就不会感到困惑。