我的PostExecute不会在我的Async中执行

时间:2016-05-23 13:58:01

标签: android json

我正在尝试使用AsyncTask方法从此API读取数据:http://events.makeable.dk/api/getEvents这是我第一次尝试这个。我试图只读取API中的所有TITLES,但我没有得到任何标题。

相反,我得到了这个例外:W/System.err: org.json.JSONException: (...) 这向我展示了整个API。

我已经放了Log.d();在我的代码周围,我可以看到我的代码永远不会在onPostExecute(String s)中做或达到某些东西,这也许就是为什么我从来没有得到任何标题。

网上有很多关于如何做到这一点的例子与彼此如此不同,这使得解决这个问题非常令人沮丧!

   private class JsonParser extends AsyncTask<String, Void, String> {

    HttpURLConnection conn;
    URL url = null;

    @Override
    protected void onPreExecute() {


        super.onPreExecute();
        Toast.makeText(MainActivity.this, "LOADING DATA FROM API", Toast.LENGTH_SHORT).show();
    }


    @Override
    protected String doInBackground(String... params) {

        try{

            url = new URL(URL);
            conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("GET");
            conn.setDoOutput(true);

            if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){

                InputStream inputStream = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder result = new StringBuilder();
                String line;


                while ((line = reader.readLine())!= null){
                    result.append(line);
                }

                return  (result.toString());
            }

        }catch (MalformedURLException e){
            e.printStackTrace();
        }catch (Exception ee){
            ee.printStackTrace();
        }

        return "";

    }


    @Override
    protected void onPostExecute(String s) {


        //------ never comes below this area //-----------
        try{

            JSONArray jsonArray = new JSONArray(s);

            for(int i =0; i<jsonArray.length(); i++){

                JSONObject jsonObject = jsonArray.getJSONObject(i);
                Log.d("TAG", "JSON: " + jsonObject.getString("TITLE"));
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

1 个答案:

答案 0 :(得分:1)

我在此Website查看了您的API回复。它是一个JSON对象,因为它是由一个开放的大括号{启动的。因此,首先使用JSONObject

响应如下:

    {
       "success": true,
       "message": "548 events returned successfully",
       "last_change": 1459515263,
       "events": [
          {
             "category": "Musik",
             "category_id": "75",
             "datelist": [
                {
                   "start": 1436536800,
                   "end": 1436544000
                }
             ],
             "description": "",
             "description_english": "",
             "description_german": "",
             "eventgroup": "",
             "eventid": "55815f7fe714a",
             "family_friendly": "0",
             "last_updated": 1436166668,
             "location_address": "Klostertorv 1",
             "location_city": "Århus C",
             "location_id": "1593",
             "location_latitude": 56.158092,
             "location_longitude": 10.206756,
             "location_name": "Klostertorv",
             "location_postcode": "8000",
             "organizer_email": "",
             "organizer_name": "Café Smagløs ",
             "organizer_phone": "",
             "picture_name": "http://www.jazzfest.dk/img/photos_big/tcha-badjo---strings-og-buttons.jpg",
             "price": "-1",
             "subcategory": "Musik",
             "subcategory_id": "84",
             "subtitle": "",
             "subtitle_english": "",
             "subtitle_german": "",
             "tags": "Swing/Mainstream",
             "tickets_url": "",
             "title": "Tcha Badjo + Strings & Buttons KONCERT AFLYST",
             "title_english": "Tcha Badjo + Strings & Buttons CONCERT CANCELLED",
             "title_german": "Tcha Badjo + Strings & Buttons CONCERT CANCELLED",
             "url": "http://www.jazzfest.dk/?a=reviews&lang=&kryds_id=2122&y=2015",
             "user_id": "23",
             "video_url": ""
          }]
    }

因此它是:

       try {
            JSONObject object = new JSONObject(s);
            JSONArray events = object.getJSONArray("events");
            int evSize = events.length();

            for (int x = 0; x < evSize; x++) {
                JSONObject object1 = events.getJSONObject(x);
                String title = object1.getString("title");
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }