Java ClassCastException错误
我正在做一个android应用程序,为此我使用了com.android.internalAPI。它们是Call.java、CallManger.java。对于这些类,我为Call.java创建了子类。你可以在这里找到这两个类 Call.java的子类是: 公共类MyCall扩展调用{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
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
}