2014-06-25 18 views
21

Próbuję utworzyć żądanie http POST w aplikacji na Androida, którą buduję, ale bez względu na to, jaki adres URL używam do żądania, Eclipse nieustannie podnosi wyjątek ze strony Malformed URL. Próbowałem linii kodu z jednego z tutoriali na temat Androida:Wyjątek Java Malformed URL

URL url = new URL("https://wikipedia.org"); 

A nawet to powoduje błąd. Czy istnieje powód, dla którego Eclipse ciągle podnosi ten błąd dla dowolnego adresu URL, który próbuję utworzyć?

+0

Zamieść swój kod i LogCat. – Sufian

+1

Działa dobrze dla mnie. Opublikuj ślad stosu. –

+0

Proszę wpisać kod w swoje pytanie, a nie w komentarzach. – Sufian

Odpowiedz

53

Nie zgłasza wyjątku, narzeka, że ​​nie obsłużyłeś the possibility that it might, nawet jeśli nie, ponieważ adres URL w tym przypadku nie jest zniekształcony. (Projektanci Javy, że to pojęcie „sprawdzone wyjątki”, był to dobry pomysł, choć w praktyce it hasn't worked well.)

zamknąć go, dodać throws MalformedURLException lub jego nadklasą throws IOException, w deklaracji metody. Na przykład:

public void myMethod() throws IOException { 
    URL url = new URL("https://wikipedia.org/"); 
    ... 
} 

Alternatywnie, łapać i przekaż przykry wyjątek jako niesprawdzony wyjątek:

public void myMethod() { 
    try { 
     URL url = new URL("https://wikipedia.org/"); 
     ... 
    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } 
} 

Java 8 dodaną klasę UncheckedIOException dla Ponowne generowanie IOException s, gdy nie można w inny sposób z nimi radzić. We wcześniejszych wersjach Javy użyj RuntimeException.

+4

Sprawdzone wyjątki nie są złym pomysłem. W jaki sposób są używane w przypadku 'MalformedURLException' jest. Wyjątek "MalformedURLException" nie powinien być sprawdzanym wyjątkiem, ale zespół Java zrobił to z jakiegoś powodu, którego jeszcze nie rozumiem. – AxiomaticNexus

+1

** nieobsługiwany wyjątek ** oznacza, że ​​wyjątek musi być ** obsłużony ** –

+0

używał nowego adresu URL w asynch doInBackground ... tylko w ten sposób mógłbym obejść błąd. Dzięki ! – JayD

Powiązane problemy