2014-06-25 13 views
21

Sto tentando di creare una richiesta HTTP POST in un'applicazione Android che sto creando, ma non importa quale URL utilizzo per la richiesta, Eclipse continua a generare un'eccezione di URL non valido. Ho provato una riga di codice da uno dei tutorial Android:Eccezione URL Java non valida

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

E anche che genera l'errore. C'è un motivo per cui Eclipse continua a generare questo errore per qualsiasi URL che cerco di creare?

+0

Pubblica il tuo codice e LogCat. – Sufian

+1

Funziona bene per me. Pubblica la traccia dello stack. –

+0

E per favore inserisci il codice nella tua domanda, e non nei commenti. – Sufian

risposta

53

Non sta sollevando l'eccezione, si lamenta di non aver gestito the possibility that it might, anche se non lo sarà, perché l'URL in questo caso non è malformato. (Progettisti di Java pensato che questo concetto, "eccezioni controllate", è stata una buona idea, anche se in pratica it hasn't worked well.)

di chiuderlo, aggiungere throws MalformedURLException, o la sua superclasse throws IOException, alla dichiarazione di metodo. Per esempio:

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

In alternativa, cattura e rigenerare l'eccezione fastidioso come eccezione incontrollato:

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

Java 8 aggiunto la classe UncheckedIOException per rethrowing IOException s quando non si può altrimenti gestirli. Nelle versioni precedenti di Java, utilizzare RuntimeException.

+4

Le eccezioni controllate non sono una cattiva idea. Il modo in cui vengono utilizzati nel caso di 'MalformedURLException' è. 'MalformedURLException' non dovrebbe essere un'eccezione controllata, ma il team Java lo ha reso così per qualche motivo che non ho ancora capito. – AxiomaticNexus

+1

** eccezione non gestita ** significa che l'eccezione deve essere ** gestita ** –

+0

stava usando il nuovo url in asynch doInBackground ... solo il modo in cui avrei potuto aggirare l'errore. Grazie ! – JayD