2012-01-09 3 views
2

My code throw java.lang.ClassCastException例外エラー、なぜこのエラーが発生しますか?私はcom.android.internal.telephony APIを使用しています。つまり、あなたが、私はここにCall.java <http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/com/android/internal/telephony/Call.java>を使用していたクラスを見つけることができ、CallManger.java <http://hi-android.info/src/com/android/internal/telephony/CallManager.java.html>は、私はこのようなCall.javaのSubclaasを作成しました: java.lang.ClassCastExceptionとは何ですか?java.util.ArrayList

public class MyCall extends Call{ 

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

     @Override 
     public List<Connection> getConnections() {   
      state = cm.getState();  
      ringingCall = (MyCall) cm.getRingingCalls(); 
      System.out.println("**inside getConnections="+ringingCall);  
      if (ringingCall != null && !ringingCall.isIdle()) { 
       System.out.println("**call is not null***"); 
       return ((MyCall) 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(); 

      if (l == null) { 
       return null; 
      }else if (l.size() == 0) 
      { 
       return null; 
      } 

      System.out.println("value of connection is=="+l); 
      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.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); 


       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; 
} 
CallManager cm = CallManager.getInstance(); 

私の別のクラスは、CallUpdateは、それは私にOutgoingCall状態(すなわち、他の側の電話がビジーである、パワーオフ、到達可能ではないなど)のコードはこのようなものですを与えるべきです

私はBroadCastReceiver()でこのクラスを呼び出しました。しかし、私は接続がnullになっています。私のコードは他の部分の中に入っていません。私はこのようなMYCALLクラスのgetConnectionメソッドでいくつかのコードを追加するよう:

public List<Connection> getConnections() {  


    state = cm.getState();  
    ringingCall = (MyCall) cm.getRingingCalls(); 
     System.out.println("**inside getConnections="+ringingCall);   
      if (ringingCall != null && !ringingCall.isIdle()) { 
      System.out.println("**call is not null***"); 
      return ((MyCall) ringingCall).getConnections(); 
     }  
     else 
     { 
      System.out.println("**list is null***"); 
      return emptyConnections; 
     } 
    } 

しかし、私はとjava.lang.ClassCastExceptionを取得しています:ライン上: ringingCall = (MyCall) cm.getRingingCalls();l = getConnection();には、どのようにこの問題を解決するには? Thxを事前に入力してください。私はあなたのcm.getRingingCalls();はすなわちCallオブジェクトのリストを返しますList<Call>getRingingCallsCall/MyCall

+0

誰が??私に正しい答えを与えることができます! – shiv1229

答えて

1
はあなたのコードを変更し

Listではなく、MyCallという単一のキャストにキャストしようとしているので、ClassCastExceptionとなります。

あなたはListにあなたのタイプを修正する必要があります。

List<MyCall> ringingCall; 
ringingCall = cm.getRingingCalls(); 

や、リストの最初の要素を使用します。

MyCall ringingCall; 
if(!cm.getRingingCalls().isEmpty()){ 
    ringingCall = cm.getRingingCalls().get(0); 
} 
+0

それはウル答え:( – shiv1229

1

ArrayListを返すと信じ

List<MyCall> ringingCall = cm.getRingingCalls();

以下のよう

+0

Thxを働いていませんが、私はまだないですすべて私が好きなことを試してみました:( – shiv1229

+0

場合は内部の取得:(!。cm.getRingingCalls()のisEmpty()){ \t \t \t \tシステムの場合.out.println( "内部****場合は"); \t \t ringingCall =(MYCALL)cm.getRingingCalls()(0)を取得;。 \t \tのSystem.out.println( "**コールがnullではありません***)); \t System.out.println( "呼び出しの値" + ringingCall); \t return((MyCall)ringingCall).getConnections(); \t \t \t}しかし、私は呼び出しステートメントの価値を得ていない – shiv1229