2016-07-04 8 views
0

jsonデータソースから受信したデータを表示しようとしています。しかし、データを解析しようとするとエラーが発生します。私はそれを解決する方法を見つけることができません。androidのjsonデータを解析中にエラーが発生しました

public void makeJSONRequest() { 
    JsonArrayRequest req = new JsonArrayRequest(endpoint_final, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        Log.d(TAG, response.toString()); 
        // UI 
        swipeRefreshLayout.setRefreshing(false); 
        for (int i = 0; i < response.length(); i++) { 
         try { 
          JSONObject object = response.getJSONObject(i); 
          JSONObject newsItems = object.getJSONObject("newsItems"); 
          for (int j = 0; j < newsItems.length(); j++) { 
           titles[j] = newsItems.getString("title"); 
           snips[j] = newsItems.getString("snip"); 
           links[j] = newsItems.getString("link"); 
          } 

         } catch (JSONException e) { 
          Log.e(TAG, "Json parsing error: " + e.getMessage()); 
          Toast.makeText(getActivity(), "JSON Parsing error", Toast.LENGTH_LONG).show(); 
         } 
        } 
        mAdapter.notifyDataSetChanged(); 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Error: " + error.getMessage()); 
      Toast.makeText(getContext(), "Error Receiving News", Toast.LENGTH_LONG).show(); 
     } 
    }); 

    // Adding request to request queue 
    InitializeVolley.getInstance().addToRequestQueue(req); 
} 

私は取得していますエラーは次のとおりです:

Error: org.json.JSONException: Value {"newsItems":[{"link":"http://www.srmuniv.ac.in/announcement/special-training-details","snip":"Dear Students,Those who are interested in Placements must follow certain guidelines.You have to clear the tests conducted by CDC and only those...","title":"CDC: Special Training - Updated"}....

ここclick here to view

私は、解析のために書いた機能は次のとおりです。

JSONデータは次のようになります

助けていただければ幸いです。 ありがとうございました!

+1

'newItems'はJSONObjectが、JSONArray応答のための – SripadRaj

+0

Iの事のより多くの私たちを見ます。 JSONObjectをJSONArrayに変換できませんエラー:JsonObjectRequest(String、>、)の適切なコンストラクタが見つかりません コンストラクタJsonObjectRequest .JsonObjectRequest(int、String、JSONObject、Listener 、ErrorListener)は使用できません (実際の引数リストと仮引数リストの長さは異なります) コンストラクタ「どうすればよいですか? – Vasilisfoo

答えて

1

まず、このjsonは配列ではなく、オブジェクトです。 JsonArrayRequestの代わりにJsonObjectRequestを使用する必要があります。あなたは誤ってjsonを構文解析していました。

public void makeJSONRequest() { 
JsonObjectRequest req = new JsonObjectRequest(endpoint_final, 
     new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       Log.d(TAG, response.toString()); 
       // UI 
       swipeRefreshLayout.setRefreshing(false); 
       JSONArray newsAr = response.getJsonArray("news"); 
       for (int i = 0; i < newsAr.length(); i++) { 
        try { 
         JSONObject newsItem = newsAr.getJSONObject(i); 
         titles[j] = newsItem.getString("title"); 
         snips[j] = newsItem.getString("snip"); 
         links[j] = newsItem.getString("link"); 

        } catch (JSONException e) { 
         Log.e(TAG, "Json parsing error: " + e.getMessage()); 
         Toast.makeText(getActivity(), "JSON Parsing error", Toast.LENGTH_LONG).show(); 
        } 
       } 
       mAdapter.notifyDataSetChanged(); 
      } 
     }, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Log.e(TAG, "Error: " + error.getMessage()); 
     Toast.makeText(getContext(), "Error Receiving News", Toast.LENGTH_LONG).show(); 
    } 
}); 

// Adding request to request queue 
InitializeVolley.getInstance().addToRequestQueue(req); 
} 
+0

おかげではないことを、あなたのlogcat – Abhish3k

1
JSONObject newsItems = object.getJSONObject("newsItems"); 

newsItemsJsonArrayあるとして代わりにJSONObjectクラスの使用JSONArray

JSONArray newsItems = object.getJSONArray("newsItems"); 
0
JSONObject object =new JSONObject[response]; 
JSONArray newsItems = object.getJSONArray("newsItems"); 

for (int j = 0; j < newsItems.length(); j++) { 

    JsonObject internal=newsItems.getJsonObject(j); 
    titles[j] = internal.getString("title"); 
    snips[j] = internal.getString("snip"); 
    links[j] = internal.getString("link"); 
} 

と交換してください。これで

0

試してみてください。

public void makeJSONRequest() { 
    JsonArrayRequest req = new JsonArrayRequest(endpoint_final, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        Log.d(TAG, response.toString()); 
        // UI 
        swipeRefreshLayout.setRefreshing(false); 
        jo = new JSONObject(response);; 
        JSONArray array = jo.getJSONArray("newsItems"); 
        for (int x = 0; x < array.length(); x++) { 
         try { 
          titles[j] = array.getJSONObject(x).optString("title"); 
          snips[j]= array.getJSONObject(x).optString("snip"); 
          links[j] = array.getJSONObject(x).optString("link"); 
         } catch (JSONException e) { 
          Log.e(TAG, "Json parsing error: " + e.getMessage()); 
          Toast.makeText(getActivity(), "JSON Parsing error", Toast.LENGTH_LONG).show(); 
         } 
        } 
        mAdapter.notifyDataSetChanged(); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e(TAG, "Error: " + error.getMessage()); 
        Toast.makeText(getContext(), "Error Receiving News", Toast.LENGTH_LONG).show(); 
       } 
      } 
    ); 

    // Adding request to request queue 
    InitializeVolley.getInstance().addToRequestQueue(req); 
} 
0

の代わりに、あなたがあなたのために重い物を持ち上げるを行うライブラリを使用することができ(そして間違いなく必要があります)、独自の解析関数を書きます。一例としては、それをチェックアウトし、GoogleのGsonライブラリのようになります。https://github.com/google/gson

0

解析のように:

try { 
    JSONObject objResponse = new JSONObject(response.toString()); 
    JsonArray arrResponse = objResponse.getJSONArray("newsItems"); 
    for (int i = 0; i < arrResponse.size(); i++) { 
     JSONObject objItems = arrResponse.get(i); 
     String link = objItems.getString("link"); 
    } 
}catch (Exception e){ 
    e.printStackTrace(); 
} 
関連する問題