我的代码抛出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,如下所示:
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
CallManager cm = CallManager.getInstance();
我的另一个类是CallUpdate,它应该给我一个OutgoingCall状态(即其他电话是Busy,Power-off,not-reachable等)。代码是这样的:
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;
}
我在BroadCastReceiver()中调用了这个类。但我得到的连接是空的。我的代码没有进入其他部分。所以我在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:on line:
ringingCall = (MyCall) cm.getRingingCalls();
还有l = getConnection();
怎么解决这个?
Thx提前。
答案 0 :(得分:1)
更改您的代码如下
List<MyCall> ringingCall = cm.getRingingCalls();
我相信您的cm.getRingingCalls();
返回ArrayList
Call
/ MyCall
答案 1 :(得分:1)
getRingingCalls
会返回List<Call>
,即Call
个对象的列表。您尝试将其转换为单个MyCall
,而不是List
,因此您获得了ClassCastException
。
您需要将类型更正为List
:
List<MyCall> ringingCall;
ringingCall = cm.getRingingCalls();
或者,使用列表中的第一个元素:
MyCall ringingCall;
if(!cm.getRingingCalls().isEmpty()){
ringingCall = cm.getRingingCalls().get(0);
}