2016-03-04 323 views
-2

我是json.My中的新問題,非常簡單。我在我的json文件中有一些數組,也是一個字符串類型的數據。從Json獲取字符串

現在我想要獲取單個文本,名稱:在我的java類中從json文件中反彈。 如何從json獲取此字符串? 或其他任何方式來得到這個?

JSON文件

[{ 
     "title": "KalerKantha | OfftechIT", 
     "image": "", 
     "link": "http://www.kalerkantho.com/" 

    }, { 
     "title": "Prothom Alo | OfftechIT", 
     "image": "", 
     "link": "http://www.prothom-alo.com/" 
    }, 
    ... 
    { 
     "anounce": "I need this this text" 
    } 

] 

Java代碼的

JsonArrayRequest movieReq = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { 
    @Override 
    public void onResponse(JSONArray response) { 
     Log.d(TAG, response.toString()); 
     hidePDialog(); 

     // Parsing json 
     for (int i = 0; i < response.length(); i++) { 
      try { 

       JSONObject obj = response.getJSONObject(i); 

       Movie movie = new Movie(); 
       movie.setTitle(obj.getString("title")); 
       movie.setThumbnailUrl(obj.getString("image")); 
       movie.setLink(obj.getString("link").toString()); 
       // adding movie to movies array 
       movieList.add(movie); 


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

     } 

     // notifying list adapter about data changes 
     // so that it renders the Grid view with updated data 
     adapter.notifyDataSetChanged(); 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     if (error instanceof NoConnectionError){ 
      hidePDialog(); 
      Toast.makeText(getActivity(), " No Internet connection! \n Please check you connection", Toast.LENGTH_LONG).show(); 

     }}; 
}); 
+0

它總是會在數組的最後一個對象? – Rohit5k2

+0

不,這是一個單一的對象。 –

+0

檢查obj.has(「anounce」),然後添加其他明智的忽略,你可以爲所有對象做這個 –

回答

2

只需做檢查宣佈出現在JSON或不

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

      JSONObject obj = response.getJSONObject(i); 

      if(obj.has("anounce")) 
      { 
      String anounce= obj.getString("anounce"); 

      } 
      else 
      { 
      Movie movie = new Movie(); 
      movie.setTitle(obj.getString("title")); 
      movie.setThumbnailUrl(obj.getString("image")); 
      movie.setLink(obj.getString("link").toString()); 
      // adding movie to movies array 
      movieList.add(movie); 

      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
+0

你的代碼不工作:(... –

+0

@AovinMahmud ..你得到任何錯誤或異常,請讓我知道 –

+0

沒有文字:(滾動文字視圖是黑色: –

1

使用optString方法。如果節點存在並且沒有找到節點String.empty,它將返回值。

From Documentation

公共字符串optString(字符串名稱)

返回通過名稱映射的值,如果它存在,強迫它如果必要的話,或者如果沒有這樣的映射存在的空字符串。

做這個

try { 

    JSONObject obj = response.getJSONObject(i); 

    String announce = obj.optString("anounce"); 

    Movie movie = new Movie(); 
    movie.setTitle(obj.optString("title")); 
    movie.setThumbnailUrl(obj.optString("image")); 
    movie.setLink(obj.optString("link")); 
    // adding movie to movies array 
    movieList.add(movie); 

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

更新:使用optString是好多了,但如果你不想使用它,然後做這個

try { 

    JSONObject obj = response.getJSONObject(i); 

    if(i == response.length() -1) 
    { 
     String announce = obj.getString("anounce"); 
    } 
    else 
    { 
     Movie movie = new Movie(); 
     movie.setTitle(obj.getString("title")); 
     movie.setThumbnailUrl(obj.getString("image")); 
     movie.setLink(obj.getString("link").toString()); 
     // adding movie to movies array 
     movieList.add(movie); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
+0

什麼都沒發生:( –

+0

在for循環後打印'announce'的值,它是否顯示任何內容,爲什麼不使用我已經回答的第二個方法。 – Rohit5k2

+0

由Log.d它的工作 –

0

你的代碼看起來象好,但您是否添加請求隊列 像: -

AppController.getInstance().addToRequestQueue(movieReq); 

movieReq is JsonArrayRequest, 請檢查。和

   String manounce=obj.getString("anounce"); 
1

你的JSON的結構很難。但是,如果你真的想要得到字符串。嘗試這個。在for循環中添加這個。

String data = (obj.getString("announce") != null) ? obj.getString("announce") : ""; 
         // If you Movie has this annouce in your settler Getter if not try to add it. 
Movie.setAnnounce(data);