Я думаю, что есть кое-что, что я пока не понимаю, как эти представления должны быть закодированы.Это третий раз, когда я приходил и отвечал на вопрос о них за последние 3 дня!: S
В любом случае, моя проблема заключается в следующем.
edit: Этот - это код внутри метода , который выполняется при нажатии кнопки: (Важные точки отмечены)
>> setContentView(R.layout.stop);
>> timer = (TextView) findViewById(R.id.timer2);
GPSMain.button = (Button) findViewById(R.id.stopbutton);
startService(new Intent(context, Timer.class));
}
Это класс Timer, который выполняется в вызове "startService": (Снова отмечаются важные точки)
public class Timer extends Service {
static int totalSeconds = 0;
private int hour = 0;
private int min = 0;
private int sec = 0;
String mTimeFormat = "%02d:%02d:%02d";
final private Handler mHandler = new Handler();
static String timeTaken;
Context context = this;
Runnable mUpdateTime = new Runnable() {
public void run() { updateTimeView(); }
};
@Override
public void onCreate() {
Toast.makeText(context, "Timer Started", Toast.LENGTH_LONG).show();
mHandler.postDelayed(mUpdateTime, 1000);
}
public void updateTimeView() {
totalSeconds += 1;
sec += 1;
if(sec >= 60) {
sec = 0;
min += 1;
if (min >= 60) {
min = 0;
hour += 1;
}
}
>> timeTaken = String.format(mTimeFormat, hour, min, sec);
>> GPSMain.timer.setText("Time Taken: "+timeTaken);
mHandler.postDelayed(mUpdateTime, 1000);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
LogCat возвращает NullPointerException в следующей строке кода:
GPSMain.timer.setText("Time Taken: "+timeTaken);
Если я удаляю эту строку кода, код выполняется правильно *, хорошо я говорю правильно, поскольку он выполняется вплоть доконец кода приложения, но причина, по которой я хочу напечатать таймер на экране во время его подсчета, заключается в том, что мне нужно убедиться, что он работает правильно.
* он не только работает правильно, но и отображает текстовое представление таймера с определенной по умолчанию строкой из xml.Только когда я пытаюсь обновить его с Java, происходит сбой.
Вот полный XML-файл, на который ссылается код в этой точке:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/stopbutton"
android:layout_width="100px"
android:layout_height="100px"
android:text="Stop"
android:layout_centerInParent="true"
/>
<TextView
android:id="@+id/timer2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Time Taken: unknown"
android:layout_below="@+id/timer"
/>
</RelativeLayout>
ОБНОВЛЕНИЕ!
MyTimer Class:
@SuppressWarnings("unchecked")
public class MyTimer extends AsyncTask {
Timer _timerTask = new Timer();
static int totalSeconds = 0, hour = 0, min = 0, sec = 0;
static String mTimeFormat = "%02d:%02d:%02d";
static String timeTakenString;
@Override
protected Object doInBackground(Object... params) {
TimerTask timer = new TimerTask() {
@Override
public void run() {
totalSeconds += 1;
sec += 1;
if(sec >= 60) {
sec = 0;
min += 1;
if (min >= 60) {
min = 0;
hour += 1;
}
}
timeTakenString = String.format(mTimeFormat, hour, min, sec);
GPSMain.timer.setText("Time Taken: "+GPSMain.timeTaken);
}
};
(_timerTask).scheduleAtFixedRate(timer,1000,1000);
return null;
}
}
Метод запуска потока таймера:
void startService(){
setContentView(R.layout.stop);
timer = (TextView) findViewById(R.id.timer2);
GPSMain.button = (Button) findViewById(R.id.stopbutton);
new MyTimer().execute();
}