java - 尝试扩展 HttpURLConnection 类时出错

标签 java android httpurlconnection

我正在尝试创建 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/

相关文章:

java - 循环内的 HttpURLConnection

java - 指定输入

javascript - 特定行号错误 - Android Studio

java - android.os.Process.killProcess(android.os.Process.myPid()) 中的错误;

android - 为什么不弃用 SurfaceView?

java - 禁用主机名验证

java - 有没有办法在Java中的抽象接口(interface)方法中要求特定值作为参数?

java - JMeter 是否会因为 Oracle 决定使用 Java 1.8v 之后的版本而付费?

java - 拦截请求并在内部转发给 Controller ?

java - 使用 HttpURLConnection 在 Java 中处理 HTTP 302 的问题