Всего начинающий программист пытается создать свое первое приложение для Android.Простой таймер обратного отсчета и несколько других вещей, и все это работало, но для того, чтобы попытаться устранить проблему с таймером обратного отсчета, я переместил этот фрагмент кода из кнопки «Пуск» в «Клик» в onCreate действия (или, по крайней мере,Я думаю у меня есть).Я думаю, это означает, что таймер обратного отсчета готов к работе, но на самом деле он не запустится, пока пользователь не нажмет кнопку «Пуск».
В любом случае, с кодом ниже я получаю исключение NullPointerException, когдазагружается активность, и я не уверен, где, или если что-то, что я сделал, это дистанционно хорошее программирование (я недавно смотрел много видео на YouTube и получил много помощи от других вопросов здесь).
Любойпомощь будет очень хорошо принята:)
package com.asurya.hulktimer;
import java.util.Random;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Vibrator;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class main extends Activity {
long starttime = 180000;
long count = 1000;
long timechange = 30000;
int missionpoints = 0;
boolean isPaused = false;
boolean clockrunning = false;
Context context = getApplicationContext();
CharSequence text = "Clock is running - create some pause code";
int duration = Toast.LENGTH_LONG;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.asurya.hulktimer.R.layout.main);
// THIS SECTION ENABLES THE FEEDBACK FOR ALL THE BUTTONS
final Vibrator vibe = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);
// THIS SECTION DEFINES THE FONT FOR ALL THE OBJECTS IN THE VIEW
final Button but_start = (Button) findViewById(com.asurya.hulktimer.R.id.but_start);
Typeface font = Typeface.createFromAsset(getAssets(), "CASLANTR.TTF");
but_start.setTypeface(font);
final Button but_reset = (Button) findViewById(com.asurya.hulktimer.R.id.but_reset);
but_reset.setTypeface(font);
final TextView txt = (TextView) findViewById(com.asurya.hulktimer.R.id.timer);
txt.setText(formatTime(starttime));
txt.setTypeface(font);
final TextView txt_mt_1 = (TextView) findViewById(com.asurya.hulktimer.R.id.lbl_missiontally_1);
txt_mt_1.setTypeface(font);
final TextView txt_mt_2 = (TextView) findViewById(com.asurya.hulktimer.R.id.lbl_missiontally_2);
txt_mt_2.setTypeface(font);
final TextView txt_mt_value = (TextView) findViewById(com.asurya.hulktimer.R.id.lbl_mt_value);
txt_mt_value.setTypeface(font);
final TextView txt_cp_value = (TextView) findViewById(com.asurya.hulktimer.R.id.lbl_cp_value);
txt_cp_value.setTypeface(font);
final Button but_add_time = (Button) findViewById(com.asurya.hulktimer.R.id.but_add);
but_add_time.setTypeface(font);
final Button but_minus_time = (Button) findViewById(com.asurya.hulktimer.R.id.but_minus);
but_minus_time.setTypeface(font);
final Button but_generate_cp = (Button) findViewById(com.asurya.hulktimer.R.id.but_generate_cp);
but_generate_cp.setTypeface(font);
final Button but_mp_add = (Button) findViewById(R.id.but_mp_add);
but_mp_add.setTypeface(font);
final Button but_mp_minus = (Button) findViewById(com.asurya.hulktimer.R.id.but_mp_minus);
but_mp_minus.setTypeface(font);
final Button but_mp_reset = (Button) findViewById(com.asurya.hulktimer.R.id.but_mp_reset);
but_mp_reset.setTypeface(font);
{
// THIS SECTION IS THE COMMAND POINTS CODE
final MediaPlayer mp = MediaPlayer.create(this, R.raw.generate);
Button but_generate_cp1 = (Button) findViewById(com.asurya.hulktimer.R.id.but_generate_cp);
but_generate_cp1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vibe.vibrate(50);
mp.start();
final Random random = new Random();
int mycps = random.nextInt(6);
final int myCommandPoints = mycps + 1;
txt_cp_value.setText("" + String.valueOf(myCommandPoints));
}
});
}
// THIS SECTION IS THE COUNTDOWN TIMER
final MediaPlayer oneminrem = MediaPlayer.create(this, R.raw.ping);
final CountDownTimer gameclock = new CountDownTimer(starttime, count) {
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
txt.setText("" + formatTime(millisUntilFinished));
long oneMinuteRemaining = millisUntilFinished /1000;
if (oneMinuteRemaining == 60){
oneminrem.start();
}
if (oneMinuteRemaining == 30){
oneminrem.start();
}
if (oneMinuteRemaining == 15){
oneminrem.start();
}
if (oneMinuteRemaining == 10){
oneminrem.start();
}
if (oneMinuteRemaining == 9){
oneminrem.start();
}
if (oneMinuteRemaining == 8){
oneminrem.start();
}
if (oneMinuteRemaining == 7){
oneminrem.start();
}
if (oneMinuteRemaining == 6){
oneminrem.start();
}
if (oneMinuteRemaining == 5){
oneminrem.start();
}
if (oneMinuteRemaining == 4){
oneminrem.start();
}
if (oneMinuteRemaining == 3){
oneminrem.start();
}
if (oneMinuteRemaining == 2){
oneminrem.start();
}
if (oneMinuteRemaining == 1){
oneminrem.start();
}
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
txt.setText("00:00");
but_start.setText("Start");
clockrunning = false;
}
};
// THIS SECTION IS THE TIMER BUTTONS
Button but_start1 = (Button) findViewById(R.id.but_start);
but_start1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vibe.vibrate(50);
if (clockrunning = false) {
gameclock.start();
}
if (clockrunning = true) {
// Display a Toast message to confirm code working.
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
});
Button but_reset1 = (Button) findViewById(R.id.but_reset);
but_reset1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vibe.vibrate(50);
if (clockrunning == true){
}
}
});
//THIS SECTIONS IS THE BUTTONS WHICH ADD OR SUBTRACT TIME FROM THE STARTING TIME
Button but_add1 = (Button) findViewById(R.id.but_add);
but_add1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vibe.vibrate(50);
if (clockrunning == false) {
starttime = starttime + timechange;
txt.setText(formatTime(starttime));
}
}
});
Button but_minus1 = (Button) findViewById(R.id.but_minus);
but_minus1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vibe.vibrate(50);
if (clockrunning == false) {
starttime = starttime - timechange;
txt.setText(formatTime(starttime));
}
}
});
//THIS SECTION HANDLES THE MISSIONS POINTS CODE
txt_mt_value.setText("" + String.valueOf(missionpoints));
Button but_missionpoint_add = (Button) findViewById(R.id.but_mp_add);
but_missionpoint_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vibe.vibrate(50);
missionpoints = missionpoints + 1;
txt_mt_value.setText("" + String.valueOf(missionpoints));
}
});
Button but_missionpoint_minus = (Button) findViewById(R.id.but_mp_minus);
but_missionpoint_minus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vibe.vibrate(50);
missionpoints = missionpoints - 1;
txt_mt_value.setText("" + String.valueOf(missionpoints));
}
});
Button but_missionpoints_reset = (Button) findViewById(R.id.but_mp_reset);
but_missionpoints_reset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vibe.vibrate(50);
missionpoints = 0;
txt_mt_value.setText("" + String.valueOf(missionpoints));
}
});
}
/* (non-Javadoc)
* @see android.app.Activity#finish()
*/
@Override
public void finish() {
// TODO Auto-generated method stub
super.finish();
}
public String formatTime(long millis) {
// String output = "00:00";
long seconds = millis / 1000;
long minutes = seconds / 60;
seconds = seconds % 60;
minutes = minutes % 60;
String secondsD = String.valueOf(seconds);
String minutesD = String.valueOf(minutes);
if (seconds < 10)
secondsD = "0" + seconds;
if (minutes < 10)
minutesD = "0" + minutes;
String output = minutesD + " : " + secondsD;
return output;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.Info:
Intent myInfoMenuIntent = new Intent(main.this, Info.class);
startActivity(myInfoMenuIntent);
return true;
case R.id.Credits:
Intent myCreditMenuIntent = new Intent(main.this, Credits.class);
startActivity(myCreditMenuIntent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}