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結果の接続をタイプにキャストすることはできませ。将来のために覚えておくことが重要です。

たまたま、クラスのカスタム 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 に答える