2012-04-22 2 views
0

MakeMissedCallActivity.java :NullPointerException이 오류

package com.android.main; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.os.Bundle; 
import android.util.Log; 

public class MakeMissedCallActivity extends Activity { 
    private Button button; 
    private static boolean mCallMadeFromApp = false; 
    private String LOG_TAG = "MakeMissedCall App"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Listen for call state changes before making the call through button 
     CallStateListener callStateListener = new CallStateListener(); 
     TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 
     telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE); 

     // add button and add dial functionality 
     button = (Button) findViewById(R.id.buttonCall); 
     button.setOnClickListener(new OnClickListener() { 
      //@Override 
      public void onClick(View arg0) { 
       mCallMadeFromApp = true; 
       Log.i(LOG_TAG, "Button clicked"); 
       Intent callIntent = new Intent(Intent.ACTION_CALL); 
       callIntent.setData(Uri.parse("tel:+918028563681")); 
       startActivity(callIntent); 
      } 
     }); 
    } 

    public boolean getmCallMadeFromApp() { 
     Log.i(LOG_TAG, "mCallMadeFromApp=" +mCallMadeFromApp); 
     return mCallMadeFromApp; 
    } 

    public void setmCallMadeFromApp(boolean mNewValue) { 
     mCallMadeFromApp = mNewValue; 
    } 
} 

CallStateListener.java : 나는 응용 프로그램을 실행하면

package com.android.main; 

import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 

//monitor phone call activities 
public class CallStateListener extends PhoneStateListener { 
    private String LOG_TAG = "MakeMissedCall App"; 
    MakeMissedCallActivity makeMissedCallActivity; 

    CallStateListener() { 
     MakeMissedCallActivity makeMissedCallActivity = new MakeMissedCallActivity(); 
    } 

    @Override 
    public void onCallStateChanged(int call_state, String incomingNumber) { 
     switch(call_state) { 
      case TelephonyManager.CALL_STATE_RINGING: 
       Log.i(LOG_TAG, "CALL_STATE_RINGING"); 
       break; 

      case TelephonyManager.CALL_STATE_OFFHOOK: 
       Log.i(LOG_TAG, "CALL_STATE_OFFHOOK. mCallMadeFromApp=" + makeMissedCallActivity.getmCallMadeFromApp()); 
       break; 

      case TelephonyManager.CALL_STATE_IDLE: 
       if (makeMissedCallActivity.getmCallMadeFromApp() == true) { 
        makeMissedCallActivity.setmCallMadeFromApp(false); 
       } 
       Log.i(LOG_TAG, "CALL_STATE_IDLE"); 
       break; 
     } 
    } 
} 

, 나는 선에서 NullPointerException이 얻을 경우 (makeMissedCallActivity.getmCallMadeFromApp() == true)CallStateListener.java.

에서

어떤 문제 일 수 있습니까?

+1

예외의 전체 스택 추적을 게시 할 수 있습니까? – Templar

답변

4

문제는이 코드 블록에있는 것 같습니다.

MakeMissedCallActivity makeMissedCallActivity; 

CallStateListener() { 
    MakeMissedCallActivity makeMissedCallActivity = new MakeMissedCallActivity(); 
} 

당신은 개인 변수를 만들하지만 생성자에서, 같은 이름와 새로운 지역 변수를 만드는 그에게 새로운 활동을 할당합니다. 생성자를 종료하면 private 변수는 여전히 null이됩니다.

무슨 뜻인지는 아마 간단합니다.

MakeMissedCallActivity makeMissedCallActivity; 

CallStateListener() { 
    makeMissedCallActivity = new MakeMissedCallActivity(); 
} 
+0

감사합니다. 정말 도움이되었습니다. – webgenius

관련 문제