2014-01-23 2 views
0

통화 기록을 가져 오려고하는데 nullpointer 예외가 발생했습니다 ... 코드 및 오류 스크린 샷을 첨부하고 있습니다. Manifest file.am에 스크린 샷을 첨부하여 권한을 추가했습니다. textViewnull이고, 그래서Android에서 전화 통화 내역을 얻는 방법

textView.setText(sb); 

다음 로그 캣 기준 enter image description here

public class MainActivity extends Activity { 
    TextView textView = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     textView = (TextView) findViewById(R.id.action_settings);  
     getCallDetails();  

    } 

    private void getCallDetails() { 
     // TODO Auto-generated method stub 
     StringBuffer sb = new StringBuffer();  
     Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null,null,null,null); 

     int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
     int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
     int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
     int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 
     sb.append("Call Log :"); 
     while (managedCursor.moveToNext()) 
     { String phNumber = managedCursor.getString(number); 
     String callType = managedCursor.getString(type); 
     String callDate = managedCursor.getString(date); 
     Date callDayTime = new Date(Long.valueOf(callDate)); 
     String callDuration = managedCursor.getString(duration); 

     String dir = null; 
     int dircode = Integer.parseInt(callType); 
     switch (dircode) 
     { 
     case CallLog.Calls.OUTGOING_TYPE: 
      dir = "OUTGOING"; 
      break; 
      case CallLog.Calls.INCOMING_TYPE: 
       dir = "INCOMING"; 
       break; 
       case CallLog.Calls.MISSED_TYPE: 
        dir = "MISSED"; 
        break; 
        } 
     sb.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration); sb.append("\n----------------------------------"); } 
     //managedCursor.close(); 
     textView.setText(sb); 


    } 

} 
+0

확인이 http://stackoverflow.com/questions/6786666/how-do-i-access-call-log-for-android – Shijil

답변

1

는 문제가 발생하는 열 (57)이 (onCreate()의 메소드 호출 57-19 = 38 행) 보인다 . 실제로 레이아웃 activity_main.xmlaction_settings이라는보기가 있는지 확인하십시오.

+0

하이 콘텐츠 제공 업체에서 제공 받고 통화 기록의 세부 사항이 일하고 있어요 미세하지만 출력 중복 된 통화 정보를 보여 주어 통화 로그에서 중복되는 것을 방지합니다. 전류 출력 이 아이디 이름 번호 시간이 1 ABC 1233 오후 2시 반 이 1233 오전 11시 반 4 ABC 1233 오전 11시 ABC 1.pm 3 2897 BDC하지만 난이 출력을하지 않으 같은 나는 (3) 1233 오후 2시 반 2 2897 오후 1시 –

0
private static String getCallDetails(Context context) { 
    StringBuffer stringBuffer = new StringBuffer(); 
    Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, 
      null, null, null, CallLog.Calls.DATE + " DESC"); 
    int number = cursor.getColumnIndex(CallLog.Calls.NUMBER); 
    int type = cursor.getColumnIndex(CallLog.Calls.TYPE); 
    int date = cursor.getColumnIndex(CallLog.Calls.DATE); 
    int duration = cursor.getColumnIndex(CallLog.Calls.DURATION);  
    while (cursor.moveToNext()) { 
     String phNumber = cursor.getString(number); 
     String callType = cursor.getString(type); 
     String callDate = cursor.getString(date); 
     Date callDayTime = new Date(Long.valueOf(callDate)); 
     String callDuration = cursor.getString(duration); 
     String dir = null; 
     int dircode = Integer.parseInt(callType); 
     switch (dircode) { 
     case CallLog.Calls.OUTGOING_TYPE: 
      dir = "OUTGOING"; 
      break; 
     case CallLog.Calls.INCOMING_TYPE: 
      dir = "INCOMING"; 
      break; 

     case CallLog.Calls.MISSED_TYPE: 
      dir = "MISSED"; 
      break; 
     } 
     stringBuffer.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " 
       + dir + " \nCall Date:--- " + callDayTime 
       + " \nCall duration in sec :--- " + callDuration); 
     stringBuffer.append("\n----------------------------------"); 
    } 
    cursor.close(); 
    return stringBuffer.toString(); 
} 
+0

BDC 답변에 설명을 추가하는 대신에 단지 코드 덤프를 제공하는 것을 고려 1 ABC 아이디 이름 번호 시간처럼해야합니다. – laalto