【问题标题】:java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnectionjava.lang.ClassCastException:libcore.net.http.HttpURLConnectionImpl 无法转换为 javax.net.ssl.HttpsURLConnection
【发布时间】:2012-06-23 01:30:56
【问题描述】:

我正在编写一些代码以通过 HTTPS 将文件从设备上传到云端。

相关sn-p:

HttpsURLConnection conn = null; 
URL url = new URL(urlstring);
conn = (HttpsURLConnection) url.openConnection(); // exception here.

但是演员阵容不会编译:

06-20 15:58:05.311: E/FNF(30286): java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnection

我发现了类似的问题:Using java class HttpsURLConnection,但我没有从 sun 包中导入任何内容。

我的进口:

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import android.net.Uri;
import javax.net.ssl.HttpsURLConnection;
import android.util.Log;
import edu.mit.media.funf.storage.RemoteFileArchive;
import edu.mit.media.funf.util.LogUtil;

我一直在为这个问题摸不着头脑,有什么建议吗?

【问题讨论】:

  • 这是一个HttpURLConnection,您不能将其转换为HttpsURLConnection。这与您链接的问题相同。你只是使用了另一个不正确的类

标签: java android http https urlconnection


【解决方案1】:

方法一: 您的 urlString 必须以 https:// 而不是 http:// 开头,您才能将其转换为 HttpsURLConnection

方法二: 如果您的 urlString 以 http:// 开头,则将 HttpsURLConnection 更改为 HttpURLConnection 应该可以工作

【讨论】:

  • 作为评论,如果您的 urlString 以 http:// 开头,将 HttpsURLConnection 更改为 HttpURLConnection 解决了错误:)
  • @MatiasElorriaga-您的评论对答案更有用...谢谢。
  • 我已将 java.net.HttpURLConnection 用于不安全的 URL,但 Google 在 Play 商店发布应用程序期间不会接受 HttpURLConnection 实现。 Play 商店的警报消息 - “您的应用正在使用不安全的 HostnameVerifier 接口实现。”请提供任何解决方案?
【解决方案2】:

我有同样的异常java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnection

uri = new URL("http://www.google.com");
HttpsURLConnection connection = (HttpsURLConnection) uri.openConnection(); // Exception

我变了

uri = new URL("http://www.google.com");

uri = new URL("https://www.google.com");

现在它运行良好。

【讨论】:

    【解决方案3】:

    简单删除urlConnection.setDoOutput(true);

    它会正常工作的。

    【讨论】:

      【解决方案4】:

      url.openConnection(); 似乎返回了libcore.net.http.HttpURLConnectionImpl 类型的对象,而您已将“conn”对象声明为import javax.net.ssl.HttpsURLConnection; 类型。您需要对导入和使用的对象进行分类。也许您错过了您正在学习的教程中的某些内容。

      【讨论】:

        猜你喜欢
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-02
        • 2016-06-30
        • 2016-01-14
        • 2013-07-25
        • 2016-07-05
        相关资源
        最近更新 更多