Avatar billede ostehamster Nybegynder
12. december 2003 - 09:08 Der er 5 kommentarer og
1 løsning

Hente data fra en hjemmeside

Hejsa

Jeg så lige dette link: http://www.eksperten.dk/spm/437468, og ville prøve at lave den kode, så det gjorde jeg:


import java.net.*;
import java.io.*;

/**
*  Description of the Class
*
*@author    ostehamster
*@created    12. december 2003
*/
public class henturl {

    /**
    *  Constructor for the test object
    */
    public henturl() {
        URL url = new URL("http://www.food4u.dk");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("POST");
        String info = "felt1=value1&felt2=value2";
        con.setDoOutput(true);
        con.getOutputStream().write(info.getBytes());
        con.connect();
        if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream is = con.getInputStream();
            byte[] b = new byte[1000];
            int n;
            while ((n = is.read(b)) >= 0) {
                String line = new String(b, 0, n);
                // process line
            }
            is.close();
        }
        con.disconnect();
    }
}


Men hvad har jeg gjort forkert? Jeg får disse fejl:
[ostehamster@localhost koder]$ javac henturl.java
henturl.java:17: unreported exception java.net.MalformedURLException; must be caught or declared to be thrown
                URL url = new URL("http://www.food4u.dk");
                          ^
henturl.java:18: unreported exception java.io.IOException; must be caught or declared to be thrown
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                                                                              ^
henturl.java:19: unreported exception java.net.ProtocolException; must be caught or declared to be thrown
                con.setRequestMethod("POST");
                                    ^
henturl.java:22: unreported exception java.io.IOException; must be caught or declared to be thrown
                con.getOutputStream().write(info.getBytes());
                                  ^
henturl.java:22: unreported exception java.io.IOException; must be caught or declared to be thrown
                con.getOutputStream().write(info.getBytes());
                                          ^
henturl.java:23: unreported exception java.io.IOException; must be caught or declared to be thrown
                con.connect();
                          ^
henturl.java:24: unreported exception java.io.IOException; must be caught or declared to be thrown
                if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                                      ^
henturl.java:25: unreported exception java.io.IOException; must be caught or declared to be thrown
                        InputStream is = con.getInputStream();
                                                          ^
henturl.java:28: unreported exception java.io.IOException; must be caught or declared to be thrown
                        while ((n = is.read(b)) >= 0) {
                                          ^
henturl.java:32: unreported exception java.io.IOException; must be caught or declared to be thrown
                        is.close();
                                ^
10 errors



mvh
Christoffer
Avatar billede jakoba Nybegynder
12. december 2003 - 09:18 #1
de forskellige metoder kan kaste en exception hvis noget går galt og det tager du ikke hensyn til sådan som du skal som du skal.

kik i APIen hvad det er for exceptions de forskellige metoder kan returnere, og sørg for at de bliver håndteret

fx med en try/catch blok om hvert kald
    try {
        URL url = new URL("http://www.food4u.dk");
    } catch ( IOException ioe ) {
        // hvad du nu vil gøre ved den
    }

mvh JakobA
Avatar billede arne_v Ekspert
12. december 2003 - 10:00 #2
Du skal enten catche dem med:

try {
  ...
} catch (MalformedURLException ex) {
  ex.printStackTrace();
} catch (ProtocolException ex) {
  ex.printStackTrace();
} catch (IOException ex) {
  ex.printStackTrace();
}

eller erklære dem i metoden:

public henturl() throws MalformedURLException, ProtocolException,IOEXception {

Ved den sidste flytte problemet bare ud til dne der kalder henturl.

I.s.f. alle de mange indviduelle execptions kan du også bare bruge
Exception som er basis klasse for dem alle. Det anses ikke for
pænt, men hvis det kun er til et lille oneoff programm så.
Avatar billede ostehamster Nybegynder
12. december 2003 - 10:20 #3
Det er bare lidt vildt, at man skal have fem linier kode, for at bruge en :(

Men sådan er reglerne jo :)

Smidder i lige nogle svar?
Avatar billede arne_v Ekspert
12. december 2003 - 10:26 #4
Checked exceptions er et meget bevidst valg fra dem der har lavet java
side.

De tvinger dig til at overveje, hvilke fejl situationer der kan opstå i
din kode.

Rent praktisk så kan moderne IDE'er generere try catch skelettet - du
markerer en kode sektion og vælger en menu og voila så er der try catch på.
Avatar billede arne_v Ekspert
12. december 2003 - 10:26 #5
svar

(Jakob var altså først)
Avatar billede ostehamster Nybegynder
12. december 2003 - 10:32 #6
ok, så giver jeg ham 20 og dig 10

Jeg har den sådan at alle der er kommet med noget brugbart skal have point, med mindre det er ren afskrivning af andres svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester