Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ClassCastException错误_Java_Android_Classcastexception - Fatal编程技术网

Java ClassCastException错误

Java ClassCastException错误,java,android,classcastexception,Java,Android,Classcastexception,我正在做一个android应用程序,为此我使用了com.android.internalAPI。它们是Call.java、CallManger.java。对于这些类,我为Call.java创建了子类。你可以在这里找到这两个类 Call.java的子类是: 公共类MyCall扩展调用{ 1. CallManager cm = CallManager.getInstance(); 2. Phone.State state; 3. 4. Phone mDe

我正在做一个android应用程序,为此我使用了com.android.internalAPI。它们是Call.java、CallManger.java。对于这些类,我为Call.java创建了子类。你可以在这里找到这两个类

Call.java的子类是:

公共类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;
        }
    }
这是最后一个修饰符类。我的另一个类是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值为null。为此,我在MyCall类的getConnection方法中添加了一些代码,以获得myConn的非null值

 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();   
        }
但它在第24行和第24行抛出ClassCastException错误
l=getConnections();
。 我还需要至少一个传出呼叫来获取myConn的值。如何解决此错误


Thx预付。

ringingCall
是一个
列表
-不是一个电话。您可能需要类似以下内容:

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

……但如果有不止一个电话,你也应该考虑一下你想做什么。< /P> 一般来说,如果你发现自己在进行强制转换,那是因为你认为自己比编译器更懂。它至少应该让你思考——如果你想要一个

调用
,但你有一个
列表
,自然的方法应该是使用列表中的元素


老实说,现在还不清楚你是否真的想在第一时间子类化
Call

我必须做些什么才能在手机中获得一个活跃的通话。你能给我一些建议吗。@shiv1229:空通话,还是空列表?你是在通话过程中调用该方法吗?请注意,这是一个内部API,这表明老实说,is可能不是最好的方法…对不起,空列表。请告诉我哪一个是最好的方法。实际上,我想获得传出呼叫状态。(即忙、无法接通和关机)是的,我在调用过程中调用了该方法。Bcoz我想要一个非空的连接值。@shiv1229:那么我不知道为什么列表是空的-但是正如我所说,使用内部API很少是个好主意。
if (ringingCall != null && !ringingCall.isEmpty()) {
    Call call = ringingCall.get(0);
    // Use call
}