我正在尝试创建 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)
这让我发疯,我已经在网上寻找解决方案几个小时了,这里的专家可以启发我吗?
谢谢!
最佳答案
在您当前的设置中,URL
类对您的自定义 URL 连接类一无所知。您进行的调用返回一个 URLConnection
类型(恰好是一个 HttpURLConnection
,但这是一个实现细节)。您无法将生成的连接转换为 MyHUC
类型,因为它不是一个。为了将来记住这一点很重要。
碰巧,有一种方法可以为 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();
关于java - 尝试扩展 HttpURLConnection 类时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14854979/