Android sdk setText错误

时间:2016-02-24 15:56:57

标签: java android nullpointerexception

我试图找出这段代码不起作用的方式。

最后一行给我一个警告

  

“不要集中用设置文本显示的文本”。

非常感谢任何帮助。

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)

2 个答案:

答案 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)等,这样我就不会感到困惑。