我是Android的菜鸟,我正在尝试在AsyncTask中的for循环中填充一个arraylist。我正在尝试从字符串数组中获取元素并填充哈希映射的arraylist。但是我一直得到一个ArrayIndexOutofBounds异常。我无法弄清楚为什么会这样。任何帮助解决这个问题都非常感谢。
我的代码
JSONArray arr= new JSONArray(s);
for(int i = 0; i < arr.length(); i++ ){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject item=arr.getJSONObject(i);
//Getting Comments
String user_comments=item.getString("COMMENTS");
Log.e("usercomment", user_comments); //Returns "~~~1#=#2#=#3#=#4~~~1#=#2#=#3#=#4~~~1#=#2#=#3#=#4"
String[]tokens = user_comments.split("~~~");
Log.e("token", tokens[0].toString());//Returns "~~~1#=#2#=#3#=#4"
Log.e("token", tokens[1].toString());//Returns "~~~1#=#2#=#3#=#4"
Log.e("token", tokens[2].toString());//Returns "~~~1#=#2#=#3#=#4"
for(int k = 0; k < tokens.length; k++ ){
String[] one_comment = tokens[k].split("#=#");
map.put("Avatar", one_comment[0]);//Error thrown here.
Log.e("Avatar", one_comment[0].toString());
map.put("Name",one_comment[1] );
Log.e("Name", one_comment[1].toString());
map.put("Comment",one_comment[2] );
Log.e("Comment", one_comment[2].toString());
map.put("CommentDate",one_comment[3] );
Log.e("CommentDate", one_comment[3].toString());
comment_data.add(map);
}
}
答案 0 :(得分:0)
这个问题正如塞尔文所述。
“~1~2”.split(“〜”)eq new String [] {“”,“1”,“2”}不是eq new String [] {“1”,“2”}
解决这个问题的一种方法是使用List并删除List中所有空白的元素,即“”
List<String>tokens = new ArrayList(Arrays.asList(user_comments.split("~~~")));
tokens.removeAll(Arrays.asList(""));
你的for循环如下:
for(int k = 0; k < tokens.size(); k++ )
{
String[] one_comment = tokens.get(k).split("#=#");
map.put("Avatar", one_comment[0]);
Log.e("Avatar", one_comment[0].toString());
map.put("Name",one_comment[1] );
Log.e("Name", one_comment[1].toString());
map.put("Comment",one_comment[2] );
Log.e("Comment", one_comment[2].toString());
map.put("CommentDate",one_comment[3] );
Log.e("CommentDate", one_comment[3].toString());
comment_data.add(map);
}
答案 1 :(得分:0)
使用当前的实现,最简单的解决方法是将k初始化为1。
for(int k = 1; k < tokens.length; k++ )...
这样您就不会尝试通过第二个循环运行空值或空值。