Błąd w onPostExecute.

Odpowiedz Nowy wątek
2019-05-27 12:25
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();
                }

            }
edytowany 1x, ostatnio: Szymon137, 2019-05-27 12:26

Pozostało 580 znaków

2019-05-27 12:58
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[...]/NetworkOnMainThreadException. A onPostExecute() wykonuje pracę na nim.

Pozostało 580 znaków

2019-05-27 14:19
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[...]/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.

Pozostało 580 znaków

2019-05-27 15:05
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.

Pozostało 580 znaków

2019-06-03 22:47
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

edytowany 1x, ostatnio: au7h, 2019-06-03 22:51

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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