2016-05-23 8 views
0

私はこのAPIからデータを読み込もうとしています:http://events.makeable.dk/api/getEvents AsyncTaskメソッドでこれは初めてです。私はAPIからすべてのタイトルを読むことを試みていますが、私はタイトルを取得していません。私の非同期で私のPostExecute dosn'tは実行されません

代わりに、この例外が発生します。W/System.err: org.json.JSONException: (...) 私はAPI全体を示しています。

私はLog.d()を入れました。私のコードの周りと私は自分のコードは決して何かに到達するか、onPostExecute(String s)で何かに達することができますし、thatsはおそらく私は決してタイトルを得ることはありません。

これを行う方法のウェブ上の多くの例は、お互いに非常に異なっており、これを解決するには非常にイライラしています!

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(); 
     } 
    } 

} 
+0

あなたは ''キャッチ(例外e)ことがわかりましたか? – Blackbelt

+0

forループの前に 'onPostExecute'で例外がスローされています。あなたのJSONが正しくフォーマットされていないので、 'JSONArray(s)'は例外をスローします。 – Sunshinator

+0

'GET'リクエストで' conn.setDoOutput(true); 'は必要ありません。 – Enzokie

答えて

2

私はあなたのAPIの応答をこのWebsiteで確認しました。開いている中括弧{によって開始されるため、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(); 
     } 
関連する問題