0

你好 stackoverflow 社区,

我最近开始学习和编写 android 应用程序。对于我的第一个应用程序,我决定创建一个简单的应用程序,您可以在其中按下一个按钮(当您去洗手间时),然后计数会在一个可编辑的文本字段中上升。还有一个重置按钮。在模拟器中启动时,它会打开到我可以看到应用程序标题的位置,但随后意外崩溃。代码如下,请帮忙:

MainActivity.java:

package com.CPTech.bathroomtracker;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    private int TOTAL_TRIPS = 0;

    private EditText tripsNumberEditText;       
    Button bathroomTripButton;
    Button resetButton;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tripsNumberEditText.setText(TOTAL_TRIPS);

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

        bathroomTripButton.setOnClickListener(bathroomTripButtonListener);

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

        resetButton.setOnClickListener(resetButtonListener);

        tripsNumberEditText = (EditText) findViewById(R.id.tripsNumberEditText);

    }

    public OnClickListener bathroomTripButtonListener = new OnClickListener(){

        @Override
        public void onClick(View v) {

            TOTAL_TRIPS++;
            tripsNumberEditText.setText(TOTAL_TRIPS);

        }

    };

    public OnClickListener resetButtonListener = new OnClickListener(){

        @Override
        public void onClick(View v) {

            TOTAL_TRIPS = 0;
            tripsNumberEditText.setText(TOTAL_TRIPS);

        }


    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

MainActivity.xml:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/TableLayout1"
    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"
    android:background="@color/dark_blue"
    tools:context=".MainActivity" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/bathroomTripButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@color/ash_grey"
            android:layout_marginTop="30dp"
            android:text="@string/bathroom_trip_button"
             />


    </TableRow>

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:layout_marginTop="30dp" >

        <TextView
            android:id="@+id/todayTripsTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="20dp"
            android:text="@string/today_trips"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textSize="16pt" />

    </TableRow>

    <TableRow
        android:id="@+id/tableRow3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="25dp" >

        <EditText
            android:id="@+id/tripsNumberEditText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="20dp"
            android:textColor="@color/white"
            android:textSize="20pt"
            android:background="@color/davy_grey"
            android:ems="2" >

            <requestFocus />
        </EditText>

    </TableRow>

    <TableRow
        android:id="@+id/tableRow4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="75dp" >

        <Button
            android:id="@+id/resetButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@color/ash_grey"
            android:text="@string/reset_count" />

    </TableRow>

</TableLayout>

日志猫:

10-23 10:43:13.230: D/AndroidRuntime(837): Shutting down VM
10-23 10:43:13.230: W/dalvikvm(837): threadid=1: thread exiting with uncaught exception (group=0x41465700)
10-23 10:43:13.340: E/AndroidRuntime(837): FATAL EXCEPTION: main
10-23 10:43:13.340: E/AndroidRuntime(837): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.CPTech.bathroomtracker/com.CPTech.bathroomtracker.MainActivity}: java.lang.NullPointerException
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.os.Looper.loop(Looper.java:137)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.app.ActivityThread.main(ActivityThread.java:5103)
10-23 10:43:13.340: E/AndroidRuntime(837):  at java.lang.reflect.Method.invokeNative(Native Method)
10-23 10:43:13.340: E/AndroidRuntime(837):  at java.lang.reflect.Method.invoke(Method.java:525)
10-23 10:43:13.340: E/AndroidRuntime(837):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-23 10:43:13.340: E/AndroidRuntime(837):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-23 10:43:13.340: E/AndroidRuntime(837):  at dalvik.system.NativeStart.main(Native Method)
10-23 10:43:13.340: E/AndroidRuntime(837): Caused by: java.lang.NullPointerException
10-23 10:43:13.340: E/AndroidRuntime(837):  at com.CPTech.bathroomtracker.MainActivity.onCreate(MainActivity.java:23)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.app.Activity.performCreate(Activity.java:5133)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
10-23 10:43:13.340: E/AndroidRuntime(837):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
10-23 10:43:13.340: E/AndroidRuntime(837):  ... 11 more
4

3 回答 3

2

看起来像这条线

tripsNumberEditText.setText(TOTAL_TRIPS);

正在给你NPE,因为你还没有初始化它。将此行移到初始化下方

tripsNumberEditText = (EditText) findViewById(R.id.tripsNumberEditText);
tripsNumberEditText.setText(TOTAL_TRIPS);

将是你的下一个错误

另外,您使用了错误的setText()方法。你给它一个int它会告诉它寻找一个resourceid显然不会找到的东西。您需要将其更改为String类似

tripsNumberEditText.setText("" + TOTAL_TRIPS);

查看重载方法

此外,由于您在onCreate()用户有机会提供任何输入之前设置文本,您还可以在您的 xml 中设置它

android:text="0"

请注意,如果您使用像这样的硬编码字符串,Eclipse 会给您一个警告,这没关系,但最好在strings.xml.

于 2013-10-23T14:55:59.027 回答
0

tripsNumberEditText像这样使用,你在实例化之前已经访问过了

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



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

        bathroomTripButton.setOnClickListener(bathroomTripButtonListener);

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

        resetButton.setOnClickListener(resetButtonListener);

        tripsNumberEditText = (EditText) findViewById(R.id.tripsNumberEditText);

        tripsNumberEditText.setText(TOTAL_TRIPS);

    }
于 2013-10-23T14:55:10.377 回答
0

运行这一行:

tripsNumberEditText = (EditText) findViewById(R.id.tripsNumberEditText);

在此行之前:

tripsNumberEditText.setText(TOTAL_TRIPS);

onCreate()

于 2013-10-23T14:56:06.653 回答