2

我正在尝试创建 HttpURLConnection 类的自定义版本。

现在的课程看起来像这样:

package com.removed;

import java.net.HttpURLConnection;
import java.net.URL;

public abstract class MyHUC extends HttpURLConnection {

    public MyHUC(URL url) {
        super(url);
        // TODO Auto-generated constructor stub
    }

}

但是当我打电话时:

MyHUC connection = (MyHUC) url.openConnection();

我收到以下错误:

02-13 14:42:23.639: E/AndroidRuntime(4735): FATAL EXCEPTION: Thread-760
02-13 14:42:23.639: E/AndroidRuntime(4735): java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl cannot be cast to com.removed.MyHUC
02-13 14:42:23.639: E/AndroidRuntime(4735):     at com.removed.TVSlideActivity.DownloadFile(TVSlideActivity.java:603)
02-13 14:42:23.639: E/AndroidRuntime(4735):     at com.removed.TVSlideActivity.access$9(TVSlideActivity.java:588)
02-13 14:42:23.639: E/AndroidRuntime(4735):     at com.removed.TVSlideActivity$5.run(TVSlideActivity.java:337)
02-13 14:42:23.639: E/AndroidRuntime(4735):     at java.lang.Thread.run(Thread.java:856)

这让我发疯了,我已经在网上寻找了几个小时的解决方案,这里的任何专家可以启发我吗?

谢谢!

4

2 回答 2

2

在您当前的设置中,URL该类对您的自定义 URL 连接类一无所知。您正在进行的调用返回一个URLConnection类型(它恰好是 a HttpURLConnection,但这是一个实现细节)。您不能将生成的连接强制转换为MyHUC类型,因为它不是 one。记住这一点对未来很重要。

碰巧的是,有一种方法可以为该类指定一个自定义 URL 连接URL类。您必须使用备用构造函数来创建 URL,提供URLStreamHandler. 示例代码如下所示:

public class MyURLConnection extends HttpURLConnection {

    public MyURLConnection(URL arg0) {
        super(arg0);
    }

    @Override
    public void disconnect() {
    }

    @Override
    public boolean usingProxy() {
        return false;
    }

    @Override
    public void connect() throws IOException {
    }
}

public class MyURLStreamHandler extends URLStreamHandler {

    public MyURLStreamHandler() {
        super();
    }

    @Override
    protected URLConnection openConnection(URL arg0) throws IOException {
        return new MyURLConnection(arg0);
    }
}

并使用了这样的:

final URL url = new URL("http", "www.google.com", -1, "",
        new MyURLStreamHandler());
final MyURLConnection conn = (MyURLConnection) url.openConnection();
于 2013-02-13T13:59:50.287 回答
0

http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

url.openConnection()不返回MyHUC对象类型,因此您不能安全地将其强制转换为该类。请阅读上面的文章以了解继承是如何工作的。

于 2013-02-13T13:58:26.053 回答