2012-01-07 66 views
0

我正在做一个android应用程序,因为我用com.android.internal API的。它们是Call.java,CallManger.java。对于这些类,我为Call.java创建了子类。你可以在这里找到这两个类http://hi-android.info/src/com/android/internal/telephony/Call.java.htmlhttp://hi-android.info/src/com/android/internal/telephony/CallManager.java.html。 Call.java的ClassCastException错误

子类:

公共类的MyCall扩展呼叫{

1.  CallManager cm = CallManager.getInstance(); 
2.  Phone.State state; 
3.  
4.  Phone mDefaultPhone; 
5.  private final ArrayList<Connection> emptyConnections = new ArrayList<Connection>();  
6.  List<Call> ringingCall; 
7.  
8.  @Override 
9.  public List<Connection> getConnections() {  
10.   
11.   
12.  state = cm.getState();  
13.  ringingCall = cm.getForegroundCalls();  
14.  System.out.println("**inside getConnections="+state); 
15.  System.out.println("**inside getConnections="+ringingCall); 
16.  if (ringingCall == null) { 
17.    
18.   System.out.println("**call is null***"); 
19.   return emptyConnections; 
20.   } 
21.   else 
22.   { 
23.   System.out.println("**call is not null***"); 
24.   return ((Call) ringingCall).getConnections(); 
      } 


     } 

     @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() { 
      List l; 
      long time = Long.MAX_VALUE; 
      Connection c; 
      Connection earliest = null; 

      l = getConnections(); 

      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(); 

Bcoz这是一个final修饰符的类。我的另一个类是CallUpdate.java。

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); 
        } 
      } 

我得到myConn值为空。为此,我在MyCall类的getConnection方法中添加了一段代码以获取myConn的非空值。即

state = cm.getState();  
     ringingCall = cm.getForegroundCalls();  
     System.out.println("**inside getConnections="+state); 
     System.out.println("**inside getConnections="+ringingCall); 
     if (ringingCall == null) { 

      System.out.println("**call is null***"); 
      return emptyConnections; 
     } 
     else 
     { 
      System.out.println("**call is not null***"); 
      return ((Call) ringingCall).getConnections(); 
     } 

但它线路上无抛出ClassCastException异常错误:24和上线 l = getConnections();。 而且我还需要至少一个传出呼叫才能获得myConn的值。如何解决这个错误?

Thx提前。

回答

1

ringingCallList<Call> - 不是一个单一的电话。你可能想要像这样的东西:

if (ringingCall != null && !ringingCall.isEmpty()) { 
    Call call = ringingCall.get(0); 
    // Use call 
} 

...但你也应该考虑你想要做什么,如果有多个电话。

一般来说,如果您发现自己正在进行转换,那是因为您认为自己比编译器更了解。它总是至少让你认为 - 并且在你想要Call但你有List<Call>的情况下,自然的方法应该是使用列表中的一个元素。

说实话,首先你不清楚真的是想要继承Call

+0

ok Jon thk u。很高兴看到你:) – shiv1229 2012-01-07 11:03:30

+0

我必须做的才能在手机中获得积极的通话。你能给我什么建议吗? – shiv1229 2012-01-07 11:07:10

+0

@ shiv1229:那么你可以调用'getForegroundCalls()'看看它是否为空... – 2012-01-07 11:09:32