Błąd w onPostExecute.

0

Aplikacja ma w tle pobierać zawartość strony a następnie wklejać to do adresu i pobierać JSONa. Dlaczego w onPostExecute wywala mi błąd?

public class downloadJSON extends AsyncTask<Void,Void,Boolean>{

        @Override
        protected Boolean doInBackground(Void... strings) {

            String sURL = "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"; //just a string
            try {


                String json = Jsoup.connect(sURL).ignoreContentType(true).execute().body();
                json=json.replace("[","");
                jsonData=json.split(",");



                       return true;
            }catch (Exception e){
                e.printStackTrace();
                return false;
            }

        }
        @Override
        protected void onPostExecute(Boolean success){
            if (success){
                try {
                    Log.i("Json0", jsonData[0]);
                    URL url = new URL("https://hacker-news.firebaseio.com/v0/item/" + jsonData[0] + ".json?print=pretty");
                    URLConnection request = url.openConnection();
                    request.connect();
                    JsonParser jp = new JsonParser();
                    JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
                    JsonObject rootobj = root.getAsJsonObject();
                    String title = rootobj.get("title").getAsString(); //just grab the zipcode
                    Log.i("tittle", title);
                }catch (Exception e){
                    e.printStackTrace();
                }


            }

0

Mamy zgadywać, jaki błąd wyskakuje?

W każdym razie na pewno nie możesz wykonać zapytania sieciowego na głównym wątku - https://developer.android.com/reference/android/os/NetworkOnMainThreadException. A onPostExecute() wykonuje pracę na nim.

0
Michał Sikora napisał(a):

Mamy zgadywać, jaki błąd wyskakuje?

W każdym razie na pewno nie możesz wykonać zapytania sieciowego na głównym wątku - https://developer.android.com/reference/android/os/NetworkOnMainThreadException. A onPostExecute() wykonuje pracę na nim.

Chodzi mi o to żeby najpierw w tle pobrało zawartość 1 strony (poczekało aby się pobrało) a następnie wykorzystać te dane w linku żeby pobrać JSONa.

1

Pobranie JSONa z serwera, to też zapytanie sieciowe. Przecież nawet wywołujesz root.getAsJsonObject() w onPostExecute(). I naprawdę dużo łatwiej by było, gdybyś wkleił treść błędu.

0

przenieś kod do doInBackground i po sprawie, nie musisz "czekać żeby się pobrało" bo doInBackground jest wykonywany linijka po linijce i program sam sobie poczeka

1 użytkowników online, w tym zalogowanych: 0, gości: 1