2012-01-09 2 views
1

В моем коде я получаю значение Call null. то есть я использую три внутренних API, они Call.javaПолучение значения вызова null

http://hi-android.info/src/com/android/internal/telephony/Call.java.html

CallManger.java

http://hi-android.info/src/com/android/internal/telephony/CallManager.java.html и

Connection.java

http://hi-android.info/src/com/android/internal/telephony/Connection.java.html.

Я создал подкласс для класса Call и connection.

public class MyCall extends Call{ 

    CallManager cm = CallManager.getInstance(); 
    Phone.State state; 
    Connection c; 
    Phone mDefaultPhone; 
    private final ArrayList<Connection> emptyConnections = new ArrayList<Connection>();  


    Call ringingCall; 

    @Override 
    public List<Connection> getConnections() {    
     System.out.println("before if****"+ringingCall); 
    if(ringingCall != null){     
     System.out.println("inside if****"); 
     ringingCall = (Call) cm.getForegroundCalls(); 
     System.out.println("**call is not null***"); 
     System.out.println("value of call"+ringingCall); 
     return ((Call) ringingCall).getConnections(); 
    }   
      else 
      { 
       System.out.println("**list is null***"); 
       return emptyConnections; 
     } 
    } 

    @Override 
    public Phone getPhone() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void hangup() throws CallStateException { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean isMultiparty() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    public Connection 
    getEarliestConnection() { 
     System.out.println("inside EarliestConnection"); 
     List l; 
     long time = Long.MAX_VALUE; 
     Connection c; 
     Connection earliest = null; 

     l = getConnections(); 
     System.out.println("value of connection is=="+l); 
     if (l == null) { 
      return null; 
     }else if (l.size() == 0) 
     { 
      return null; 
     } 


     for (int i = 0, s = l.size() ; i < s ; i++) { 
      c = (Connection) l.get(i); 
      long t; 

      t = c.getCreateTime(); 

      if (t < time) { 
       earliest = c; 
       time = t; 
      } 
     } 

     return earliest; 
    } 
    } 

Я назвал CallManger так:

CallManager cm = CallManager.getInstance(); 

Мой другой класс CallUpdate. Он должен дать мне OutgoingCall States (например, состояние другого конечного телефона занято, отключено или недоступно).

public class CallUpdate { 

    Call myCall = new MyCall(); 
    Connection myConn = new MyConnection(); 
    CallManager cm = CallManager.getInstance(); 

     public Object getCallFailedString(){ 

      myConn = myCall.getEarliestConnection(); 
      System.out.println("myConn is ******"+myConn); 
      System.out.println("myCall is ******"+myCall); 

      if(myConn == null){ 
       System.out.println("myConn is null ******"); 
       return null; 
      }     
      else 
      { 
       Connection.DisconnectCause cause = myConn.getDisconnectCause();      
       System.out.println("myconn is not null ******"+cause); 


       switch(cause){ 

       case BUSY : 
        System.out.println("inside busy"); 
       break; 

       case NUMBER_UNREACHABLE : 
        System.out.println("inside un-reachable"); 
       break; 

       case POWER_OFF : 
        System.out.println("inside power off"); 
       break; 
       }  


     } 
    return myConn; 
} 

} 

Но я получаю значение Call в NULL в вышеуказанном методе Call.java.

Вызов ringingCall

public List<Connection> getConnections() {    
    System.out.println("before if****"+ringingCall); 
    if(ringingCall != null){     
    System.out.println("inside if****"); 
    ringingCall = (Call) cm.getForegroundCalls(); 
    System.out.println("**call is not null***"); 
    System.out.println("value of call"+ringingCall); 
    return ((Call) ringingCall).getConnections(); 
}   
     else 
     { 
      System.out.println("**list is null***"); 
      return emptyConnections; 
    } 
    } 

Значения rigingCall равна нулю. Почему это значение равно null? Я делаю правильно?. plz help me

Thx заранее.

+0

@Vanathi: Могу ли я ответить на мой вопрос? Я иду правильно? – shiv1229

+0

Извините, я понятия не имею об Android. Но вы можете попробовать «Call ringingCall = new Call();» вместо «Call ringingCall = null;», как ответил Брайан. – Vaandu

+0

@ shiv1229 - прочитав все вопросы, которые вы задали об этом, похоже, вы участвуете в форме программирования культовых грузов. Не понимая, что именно вы печатаете, возможность создания рабочего кода в лучшем случае будет случайной удачей. Я бы предложил книгу хорошего новичка по Java или учебники по Java Java по крайней мере. –

ответ

3

Вы никогда не инициализируете ringingCall в своем классе MyCall, поэтому это null.

Это приводит к myConn также являющимся null, просматривающим ваш код.

+0

thk u. Как это сделать в моем коде – shiv1229

+0

Call ringingCall = null; Инициализирован как в классе MyCall, но все же ringingCall имеет значение – shiv1229

+0

@Brain: R u there? PLZ сказать мне, как инициализировать. – shiv1229

Смежные вопросы