2012-01-07 27 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

相關問題