Java 当JSONArray提供空值时显示文本-android
我从Java 当JSONArray提供空值时显示文本-android,java,android,arrays,Java,Android,Arrays,我从JSONArray获取数据,当数据为空时,我需要显示一条文本,说明无数据。这是代码。我在执行此操作时出错 List<NameValuePair> params = new ArrayList<NameValuePair>(); json = jParser.makeHttpRequest(url_all_events, "GET", params); try { events = json.getJSON
JSONArray
获取数据,当数据为空时,我需要显示一条文本,说明无数据。这是代码。我在执行此操作时出错
List<NameValuePair> params = new ArrayList<NameValuePair>();
json = jParser.makeHttpRequest(url_all_events, "GET", params);
try {
events = json.getJSONArray(TAG_EVENTS);
if(events.length() == 0){
TextView txno = (TextView) findViewById(R.id.no_events);
txno.setVisibility(View.VISIBLE);
}else{
for (int i = 0; i < events.length(); i++) {
JSONObject c = events.getJSONObject(i);
id = c.getString(TAG_ID);
date = c.getString(TAG_DATE);
venue = c.getString(TAG_VENUE);
time = c.getString(TAG_TIME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_DATE, date);
map.put(TAG_TIME, time);
map.put(TAG_VENUE, venue);
// adding HashList to ArrayList
eventList.add(map);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
当我收到空值时如何设置文本?中
events
的赋值:events=json.getJSONArray(TAG\u events)代码>将不起作用,并将引发异常,因为没有JSONArray
解决此问题的一种方法是在catch
子句中设置错误,如下所示:
List<NameValuePair> params = new ArrayList<NameValuePair>();
json = jParser.makeHttpRequest(url_all_events, "GET", params);
try {
events = json.getJSONArray(TAG_EVENTS);
if(events.length() == 0) {
throw new JSONException("Content was empty");
} else {
for (int i = 0; i < events.length(); i++) {
id = c.getString(TAG_ID);
date = c.getString(TAG_DATE);
venue = c.getString(TAG_VENUE);
time = c.getString(TAG_TIME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_DATE, date);
map.put(TAG_TIME, time);
map.put(TAG_VENUE, venue);
// adding HashList to ArrayList
eventList.add(map);
}
}
} catch (JSONException e) {
TextView txno = (TextView) findViewById(R.id.no_events);
txno.setVisibility(View.VISIBLE);
}
List params=new ArrayList();
json=jParser.makeHttpRequest(url\u所有事件,“GET”,参数);
试一试{
events=json.getJSONArray(TAG_events);
if(events.length()=0){
抛出新的JSONException(“内容为空”);
}否则{
对于(int i=0;ivalue
地图放置(标签标识,标识);
地图放置(标记日期、日期);
地图放置(标记时间,时间);
地图放置(TAG_场馆,场馆);
//将哈希列表添加到ArrayList
添加(地图);
}
}
}捕获(JSONException e){
TextView txno=(TextView)findViewById(R.id.no_事件);
txno.setVisibility(视图可见);
}
当events JSONArray
中没有内容时,这也会引发异常。但是异常将被捕获并显示一条您已经设置好的消息(我想)。中events
的赋值:events=json.getJSONArray(TAG\u events)代码>将不起作用,并将引发异常,因为没有JSONArray
解决此问题的一种方法是在catch
子句中设置错误,如下所示:
List<NameValuePair> params = new ArrayList<NameValuePair>();
json = jParser.makeHttpRequest(url_all_events, "GET", params);
try {
events = json.getJSONArray(TAG_EVENTS);
if(events.length() == 0) {
throw new JSONException("Content was empty");
} else {
for (int i = 0; i < events.length(); i++) {
id = c.getString(TAG_ID);
date = c.getString(TAG_DATE);
venue = c.getString(TAG_VENUE);
time = c.getString(TAG_TIME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_DATE, date);
map.put(TAG_TIME, time);
map.put(TAG_VENUE, venue);
// adding HashList to ArrayList
eventList.add(map);
}
}
} catch (JSONException e) {
TextView txno = (TextView) findViewById(R.id.no_events);
txno.setVisibility(View.VISIBLE);
}
List params=new ArrayList();
json=jParser.makeHttpRequest(url\u所有事件,“GET”,参数);
试一试{
events=json.getJSONArray(TAG_events);
if(events.length()=0){
抛出新的JSONException(“内容为空”);
}否则{
对于(int i=0;ivalue
地图放置(标签标识,标识);
地图放置(标记日期、日期);
地图放置(标记时间,时间);
地图放置(TAG_场馆,场馆);
//将哈希列表添加到ArrayList
添加(地图);
}
}
}捕获(JSONException e){
TextView txno=(TextView)findViewById(R.id.no_事件);
txno.setVisibility(视图可见);
}
当events JSONArray
中没有内容时,这也会引发异常。但是异常将被捕获并显示一条您已经设置好的消息(我想)。虽然Alex van den Hoogen的回答是正确的,但我想指出,有两种类似的方法可以从JSONObject
提取值:
getJSONArray()
如果该键没有值,则抛出异常李>
optJSONArray()
在这种情况下返回null
您可以像这样使用后一个:
events = json.optJSONArray(TAG_EVENTS);
if (events == null || events.length() == 0) {
TextView txno = (TextView) findViewById(R.id.no_events);
txno.setVisibility(View.VISIBLE);
} else {
...
}
虽然Alex van den Hoogen的回答是正确的,但我想指出,从JSONObject
中提取值有两种类似的方法:
getJSONArray()
如果该键没有值,则抛出异常李>
optJSONArray()
在这种情况下返回null
您可以像这样使用后一个:
events = json.optJSONArray(TAG_EVENTS);
if (events == null || events.length() == 0) {
TextView txno = (TextView) findViewById(R.id.no_events);
txno.setVisibility(View.VISIBLE);
} else {
...
}
json解析器中有一个问题。从那里只发生异常和错误。在解析器抛出错误后,我检查了其中的log.d对话框,这是故意的错误。我认为JSON解析器是正确的。无论如何,@Alexander Sukharev answer/addition有一个更干净的解决方案。json解析器中有一个问题。从那里只发生异常和错误。在解析器抛出错误后,我检查了其中的log.d对话框,这是故意的错误。我认为JSON解析器是正确的。无论如何,@Alexander Sukharev answer/addition有一个更干净的解决方案。谢谢你指出这一点。我也会返回
在设置TextView
后,这使得代码更具可读性,但这只是吹毛求疵:)。我在解析数据org.json.JSONException时出错:org.json.JSONObject$1类型的值null无法转换为JSONObject Error似乎有其他行给出了一个异常。对JSONObject c=events.getJSONObject(i)做同样的工作代码>和其他地方。确保JSONArray
的元素是JSONObject
s,而不是String
s或其他元素。如果无法修复,请告诉我们错误发生在哪一行代码上,并发布您的json。感谢您指出这一点。我也会返回
在设置TextView
后,这使得代码更具可读性,但这只是吹毛求疵:)。我在解析数据org.json.JSONException时出错:org.json.JSONObject$1类型的值null无法转换为JSONObject Error似乎有其他行给出了一个异常。对JSONObject c=events.getJSONObject(i)做同样的工作代码>和其他地方。确保JSONArray
的元素是JSONObject
s,而不是String
s或其他元素。如果无法修复,请告诉我们错误发生在哪一行代码上,并发布json。