2017-01-19 4 views
-2

타이머에 대한 시작 버튼을 눌렀을 때 오류가 발생합니다. 나는 왜 그것이 작동하지 않는지 모른다. 이전에이 코드로 작업 했었지만 지금 시도하고 실행할 때 오류가 발생하면 즉시 충돌합니다.java.lang.NullPointerException : 가상 메소드를 호출하려고 시도 'void android.widget.TextView.setText (java.lang.CharSequence)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    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" 
    tools:context=".WegmansActivity"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Back" 
     android:id="@+id/backButton" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:onClick="backButton" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="400°" 
     android:id="@+id/degreeText" 
     android:textSize="60sp" 
     android:layout_below="@+id/backButton" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="40dp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="16:00" 
     android:id="@+id/wegmansTimerText" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:textSize="60sp" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Start" 
     android:id="@+id/startButton" 
     android:layout_marginBottom="52dp" 
     android:textSize="20sp" 
     android:padding="20dp" 
     android:onClick="wegmansTimer" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

내 오류 ::

java.lang.IllegalArgumentException: Binary XML file line #44: Process: com.example.pc.mealtimers, PID: 2346 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
    at com.example.pc.mealtimers.WegmansActivity.updateTimer(WegmansActivity.java:60) 
    at com.example.pc.mealtimers.WegmansActivity$1.onTick(WegmansActivity.java:33) 
    at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:133) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
: 여기
package com.example.pc.mealtimers; 

import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.Button; 
import android.widget.TextView; 

public class WegmansActivity extends AppCompatActivity{ 
    static TextView wegmansTimerText; 
    static Boolean counterIsActive = false; 
    Button wegStart; 
    static CountDownTimer countDownTimer; 




    public static void resetTimer(){ 
     wegmansTimerText.setText("16:00"); 
     countDownTimer.cancel(); 
     counterIsActive = false; 

    } 

    public static void wegmansTimerInit() { 
     if (counterIsActive == false) { 
      counterIsActive = true; 
      //wegButton.setText("Stop!"); 
      countDownTimer = new CountDownTimer(960000, 1000) { 

       @Override 
       public void onTick(long millisUntilFinished) { 
        updateTimer((int) millisUntilFinished/1000); 
       } 

       @Override 
       public void onFinish() { 
        wegmansTimerText.setText("0:00"); 
       } 
      }.start(); 
     }else{ 
      wegmansTimerText.setText("16:00"); 
      resetTimer(); 

     } 

    } 

    public static void updateTimer(int secondsLeft){ 

     //System.out.println("TICKING"); 
     counterIsActive = true; 
     int minutes = (int) secondsLeft/60; 
     int seconds = secondsLeft - minutes *60; 
     String secondString = Integer.toString(seconds); 
     if (seconds <=9){ 
      secondString = "0" + secondString; 

     } 
     wegmansTimerText.setText(Integer.toString(minutes) + ":" + secondString); 

    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_wegmans); 

     wegmansTimerText = (TextView)findViewById(R.id.wegmansTimerText); 
     wegStart = (Button)findViewById(R.id.startButton); 
    } 
} 

는 타이머가 위치한 레이아웃 내 코드입니다 : 여기

내 타이머 코드에 대한 클래스입니다
+0

라이프 케어 단계에서 귀하는 귀하의 기능을 부르셨습니까? –

답변

0

이것은 교육 된 추측 일 뿐이지 만 NPE는 필드에 메서드를 호출한다는 사실 때문에 발생할 수 있습니다. wegmansTimerText은 정적 방법 updateTimer입니다.

특정 필드를 인스턴스화하는 onCreate이 호출되기 전에 init 메소드를 통해 updateTimer이 실행됩니다. 이 방법은 wegmansTimerText입니다. 타이머의 호출 된 메서드를 라이프 사이클에 맞게 올바르게 정렬해야합니다. 즉, 정적 메서드의 내용을 onCreate 또는 다음 수명주기 상태에 넣어야 할 수 있습니다.

지금은 Android Studio가 없으므로 테스트를 거치지 않았지만 올바른 방향으로 안내 할 수 있습니다.

희망이 도움이됩니다.

관련 문제