-1

我是 android 的菜鸟,我正在尝试在 AsyncTask 的 for 循环中填充一个数组列表。我正在尝试从字符串数组中获取元素并填充哈希图的数组列表。但是我不断收到 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);
                                }

                            } 
4

2 回答 2

0

问题正如 Selvin 上面所说的那样。

"~1~2".split("~") eq new String[] { "", "1", "2" } not eq new String[] { "1", "2" }

解决此问题的一种方法是使用列表并删除列表中所有空白的元素,即“”

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);
   }
于 2013-07-16T16:39:38.837 回答
0

对于您当前的实现,最简单的解决方法是将 k 初始化为 1。

for(int k = 1; k < tokens.length; k++ )...

这样您就不会尝试通过第二个循环运行空白或空值。

于 2013-07-16T21:08:05.673 回答