Java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl не может быть добавлено в javax.net.ssl.HttpsURLConnection
Я пишу немного кода для загрузки файла с устройства в облако через HTTPS.
Соответствующий фрагмент:
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
Я нашел этот похожий вопрос: Использование java-класса 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;
Я уже немного почесываю голову об этом, любые предложения?
Ответы
Ответ 1
Метод 1:
Ваш urlString
должен начинаться с https://
, а не с http://
, чтобы вы могли привести его к HttpsURLConnection
.
Способ 2:
если ваша строка urlString начинается с http://
, изменение HttpsURLConnection
на HttpURLConnection
должно работать
Ответ 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
url.openConnection();
похоже, возвращает объект типа libcore.net.http.HttpURLConnectionImpl
, в то время как вы объявили свой объект "conn" как тип import javax.net.ssl.HttpsURLConnection;
. Вам нужно отсортировать импорт и использованные объекты. Возможно, вы пропустили что-то в учебном пособии, в котором вы следовали.
Ответ 4
Просто удалите urlConnection.setDoOutput(true);
он будет работать нормально.