java.lang.NoSuchMethodError: org.json.JSONArray.remove
问题:
使用JSONArray时候,出现这个错误的原因是JSONArray.remove 是因为JSONArray的remove方法是在API 19之后才加入的SDK中。
解决方案:
1.获取SDK版本,根据版本号,做出不同的逻辑处理。
if ( Build.VERSION.SDK_INT<19){
jsonArray= JsonUtil.removeFromJsonArray(jsonArray,i);
}else {
jsonArray.remove(i);
}
2.当SDK版本小于19时候,手动书写jsonArray的remove操作
removeFromJsonArray()方法
/**
* 删除给定index中jsonArray中的元素
* @param jsonArray 被操作的jsonArray
* @param index 要被删除位置
* @return 被处理过的jsonArray
*/
public static JSONArray removeFromJsonArray(JSONArray jsonArray,int index) throws JSONException {
JSONArray mJsonArray=new JSONArray();
if (index<0){
Log.d(TAG,“传入的数据不能为负数”);
return mJsonArray;
}else if (index>jsonArray.length()){
Log.d(TAG,“传入索引大于json数组长度”);
return mJsonArray;
}
for (int i= 0;i<index;i++){
mJsonArray.put(jsonArray.getJSONObject(i));
}
int tempSize=jsonArray.length();
for (int n=index+1;n<tempSize;n++){
mJsonArray.put(jsonArray.getJSONObject(n));
}
return mJsonArray;
}
PS:删除从开始position到结束position
/***
* 删除给定index中jsonArray中的元素
* @param jsonArray 被操作的jsonArray
* @param from 开始位置
* @param to 结束位置
* @return 被处理过的jsonArray
* @throws JSONException
*/
public static JSONArray removeFromJsonArray(JSONArray jsonArray,int from,int to) throws JSONException {
JSONArray mJsonArray=new JSONArray();
if (from<0||to<0){
LogUtil.d(TAG,“传入的数据不能为负数”);
return mJsonArray;
}else if (to<from){
LogUtil.d(TAG,“左边索引不能大于右边索引”);
return mJsonArray;
}else if (to>jsonArray.length()){
LogUtil.d(TAG,“传入索引大于json数组长度”);
return mJsonArray;
}
for (int i= 0;i<from;i++){
mJsonArray.put(jsonArray.getJSONObject(i));
}
int tempSize=jsonArray.length();
for (int n=to+1;n<tempSize;n++){
mJsonArray.put(jsonArray.getJSONObject(n));
}
return mJsonArray;
}