Hello stackoverflow community,
I recently began learning and coding android applications. For my first app, I decided to create a simple app where you press a button (when you go to the bathroom) and the count goes up in an editable text field. There is also a reset button. On launch in an emulator, it opens to where I can see the app title but then crashes unexpectedly. Code is below, please help:
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>
Logcat:
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
It looks like this line
tripsNumberEditText.setText(TOTAL_TRIPS);
is giving your NPE
because you haven't yet initialized it. Move this line below the initialization
tripsNumberEditText = (EditText) findViewById(R.id.tripsNumberEditText);
tripsNumberEditText.setText(TOTAL_TRIPS);
Will be your next error
Also, you are using the wrong setText()
method. You are giving it an int
which will tell it to look for a resource
with that id
which it obviously won't find. You need to change it to a String
with something like
tripsNumberEditText.setText("" + TOTAL_TRIPS);
Furthermore, since you are setting the text in onCreate()
before the user has a chance to give any input, you could also set it in your xml with
android:text="0"
Note if you use a hard-coded string like this Eclipse will give you a warning which would be ok but better to define the value in strings.xml
.
Use like this, you have accessed tripsNumberEditText
before instantiating it
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);
}
run this line:
tripsNumberEditText = (EditText) findViewById(R.id.tripsNumberEditText);
BEFORE this line:
tripsNumberEditText.setText(TOTAL_TRIPS);
in onCreate()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.