我正在尝试编写一个程序,它将在EditText字段中输入数字并将其转换为整数,以便我以后可以使用它为应用程序设置计时器。我想说,如果单击其中一个按钮,将检查EditText。如果没有输入任何内容,我想要弹出一条消息,要求输入定时器的秒数。如果有一个数字,我希望程序启动一个新的活动。这是我的代码:
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class Start extends Activity {
Button button1;
EditText et;
String timer;
int timer1;
Button button2;
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);
et = (EditText)findViewById(R.id.editText1);
button2.setOnClickListener( new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (timer.isEmpty()){
AlertDialog.Builder build = new AlertDialog.Builder (Start.this);
build.setMessage("Please, type in the number of seconds");
build.setNegativeButton("Okay,Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
finish();
}
});
AlertDialog alert = build.create();
alert.show();
}
else{
bull();
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
timer = et.getText().toString();
bull();
int secondsDelayed = 1;
new Handler().postDelayed(new Runnable() {
public void run() {
Intent intent = new Intent(Start.this, MainActivity.class);
startActivity(intent);
}
}, secondsDelayed * timer1*1000);
}
}
});
button1.setOnClickListener ( new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (timer.isEmpty()){
AlertDialog.Builder build = new AlertDialog.Builder (Start.this);
build.setMessage("Please, type in the number of seconds");
build.setNegativeButton("Okay,Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
finish();
}
});
AlertDialog alert = build.create();
alert.show();
}
else{
bull();
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
bull();
int secondsDelayed = 1;
new Handler().postDelayed(new Runnable() {
public void run() {
Intent intent = new Intent(Start.this, MainActivity2.class);
startActivity(intent);
}
}, secondsDelayed * timer1*1000);
}
}
});
}
private void bull() {
// TODO Auto-generated method stub
timer1 = Integer.parseInt(timer);
}
}
但是,我得到NullPointerException。我的错误在哪里?感谢
这是我的LogCat:
03-18 22:16:57.506: I/Process(3008): Sending signal. PID: 3008 SIG: 9
03-18 22:17:19.948: D/skia(3858): new locale en-Latn-GB
03-18 22:17:19.998: D/dalvikvm(3858): GC_FOR_ALLOC freed 80K, 7% free 17272K/18412K, paused 16ms, total 16ms
03-18 22:17:20.008: I/dalvikvm-heap(3858): Grow heap (frag case) to 20.149MB for 2359312-byte allocation
03-18 22:17:20.018: D/dalvikvm(3858): GC_FOR_ALLOC freed 1K, 6% free 19574K/20720K, paused 14ms, total 14ms
03-18 22:17:20.038: D/dalvikvm(3858): GC_CONCURRENT freed <1K, 6% free 19574K/20720K, paused 3ms+1ms, total 18ms
03-18 22:17:20.148: D/libEGL(3858): loaded /system/lib/egl/libEGL_adreno200.so
03-18 22:17:20.148: D/libEGL(3858): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
03-18 22:17:20.148: D/libEGL(3858): loaded /system/lib/egl/libGLESv2_adreno200.so
03-18 22:17:20.148: I/Adreno200-EGL(3858): <qeglDrvAPI_eglInitialize:265>: EGL 1.4 QUALCOMM build: (CL3579225)
03-18 22:17:20.148: I/Adreno200-EGL(3858): Build Date: 04/22/13 Mon
03-18 22:17:20.148: I/Adreno200-EGL(3858): Local Branch: adreno_sba_20130419
03-18 22:17:20.148: I/Adreno200-EGL(3858): Remote Branch:
03-18 22:17:20.148: I/Adreno200-EGL(3858): Local Patches:
03-18 22:17:20.148: I/Adreno200-EGL(3858): Reconstruct Branch:
03-18 22:17:20.208: D/OpenGLRenderer(3858): Enabling debug mode 0
03-18 22:17:28.096: D/GestureDetector(3858): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 11 mFalseSizeCnt:0
03-18 22:17:29.167: D/GestureDetector(3858): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 4 mFalseSizeCnt:0
03-18 22:17:29.187: D/AndroidRuntime(3858): Shutting down VM
03-18 22:17:29.187: W/dalvikvm(3858): threadid=1: thread exiting with uncaught exception (group=0x4104fac8)
03-18 22:17:29.187: E/AndroidRuntime(3858): FATAL EXCEPTION: main
03-18 22:17:29.187: E/AndroidRuntime(3858): java.lang.NullPointerException
03-18 22:17:29.187: E/AndroidRuntime(3858): at com.example.scaryme.Start$2.onClick(Start.java:78)
03-18 22:17:29.187: E/AndroidRuntime(3858): at android.view.View.performClick(View.java:4354)
03-18 22:17:29.187: E/AndroidRuntime(3858): at android.view.View$PerformClick.run(View.java:17962)
03-18 22:17:29.187: E/AndroidRuntime(3858): at android.os.Handler.handleCallback(Handler.java:725)
03-18 22:17:29.187: E/AndroidRuntime(3858): at android.os.Handler.dispatchMessage(Handler.java:92)
03-18 22:17:29.187: E/AndroidRuntime(3858): at android.os.Looper.loop(Looper.java:137)
03-18 22:17:29.187: E/AndroidRuntime(3858): at android.app.ActivityThread.main(ActivityThread.java:5328)
03-18 22:17:29.187: E/AndroidRuntime(3858): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 22:17:29.187: E/AndroidRuntime(3858): at java.lang.reflect.Method.invoke(Method.java:511)
03-18 22:17:29.187: E/AndroidRuntime(3858): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
03-18 22:17:29.187: E/AndroidRuntime(3858): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
03-18 22:17:29.187: E/AndroidRuntime(3858): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
您的问题似乎是您从未初始化计时器。因此,在on click方法中调用timer.isEmpty()会失败,因为timer是null。你应该能够通过给定时器一个默认值“”来解决这个问题。