Hirdetés

Új hozzászólás Aktív témák

  • meone
    tag

    Te nagyon kevered a szezont a fazonnal. Nem sokat programoztál Javában, meg úgy egyáltalán, jól sejtem? Az alapokat valahogy össze kéne szedni. A szál nem azt jelenti, hogy egy külön osztályba szervezed a kódot, hanem teljesen mást.

    Most gondoltam el kezdem magyarázni, hogy hogyan készíts egy új szálat Android módon stb, de rájöttem, hogy igazából a szál fogalmát se ismerheted, különben nem jössz elő ezzel a példával. No offense. Itt van egy leírás az Android UI száláról. Itt pedig úgy szálakról általában. Ha ezeket elolvastad, ne tévesszen meg a dolog, Android-on nem Thread-et szoktunk használni, hanem az első linkben bemutatott AsyncTask-ot.

    Default constructor cannot handle exception type MalformedURLException thrown by implicit super constructor. Must define an explicit constructor

    Ha egy osztályban nem deklarálsz explicite konstruktort, akkor a fordító létrehoz egy úgynevezett default konstruktort, aminek nincs paramétere és nem dob semmilyen kivételt. De csak akkor hozza létre. ha az ősnek létezik és elérhető olyan konstruktora aminek nincs paramétere és nem dob semmilyen kivételt. Tehát valójában "így nézne ki a class":

    public class UrlRead {

    public UrlRead(){
    super();
    }
    ...
    }

    Ezen kívül Te a konstruktoron kívül rögtön inincializálod a két meződet. Ebben az esetben ez a művelet valójában úgymond a default konstruktorban fog végrehajtódni, valahogy így lesz a lefordított osztályban (pszeudokód):

    public class UrlRead {

    URL logPage;
    BufferedReader in;

    public UrlRead(){
    logPage = new URL("http://bkaroly.hu/log.php");
    in = new BufferedReader(new InputStreamReader(logPage.openStream()));
    super();
    }
    ...
    }

    Itt viszont meghívod az URL osztály konstruktorát. Ebben deklarálva van, hogy MalformedURLException-t dobhat:

    URL osztály részlete:

    public URL(String url) throws MalformedURLException{ ... }

    Javában viszont minden ellenőrzött kivételt (és a MalformedURLException az), kötelező lekezelni. Ennek két módja van, vagy try-catch blokkba rakod a műveletet, vagy jelzed, hogy tovább dobható a kivétel a throws kulcsszóval. De a default konstruktor nem dobhat tovább kivételt, ahogy már jeleztem, ezért kapod ezt a fordítási hibát.

    Mellesleg a kódodnak nem sok értelme lenne ha fordulna is, hiszen megkapod a BufferedReadert de aztán semmit se kezdesz vele.

    Javában soha nem programoztam.
    Delphi-ben programoztam ezelőtt 6 évvel az egyetemen.
    Inkább PHP-ban készítettem eddig kisebb nagyobb oldalakat, és programokat.

    Nagyából most már van fogalmam a szálról is, de még sokat kell tanulnom a hibáimból.
    Íme egy újabb próbálkozás:
    Próbáltam megint össze eszkábálni egy URL-es cuccot amivel leszedem az adatokat.
    Most már legalább értem miért van ott a try, catch blokk
    Tutoiriál alapján eszkábáltam a kódot megint amit te is ide tettél.
    MainActivity.class tartalma most ez:

    package com.example.webv;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;

    import android.app.Activity;
    import android.os.Bundle;

    import com.google.gson.Gson;

    public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    }

    public class ReadTextFromURL {

    public void main(String[] args) {

    try {

    URL url = new URL("http://bkaroly.hu/log.php");


    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

    String line;
    while ((line = in.readLine()) != null) {
    System.out.println(line);
    }
    in.close();

    }
    catch (MalformedURLException e) {
    System.out.println("Malformed URL: " + e.getMessage());
    }
    catch (IOException e) {
    System.out.println("I/O Error: " + e.getMessage());
    }

    }

    }


    public static void main(String[] args) {

    Gson gson = new Gson();

    String json = "{\"elements\":[{\"sensor\":\"2\"}]}";
    LogHolder fromJson = gson.fromJson(json, LogHolder.class);
    System.out.println(fromJson);
    }


    }

    Szerintem most is elszúrtam valamit.
    Valami kis megerősítés, hogy jó felé túrom a nettet és nem megint egy bazi nagy ökörséget pakoltam össze?
    Mit kell még át néztem, hogy most már meg is tudja jeleníteni a dolgokat?
    Bele kéne még a dologba hozni az AsyncTask-ot is?

Új hozzászólás Aktív témák