ArrayList奇怪的行为

时间:2013-10-04 07:13:40

标签: java arraylist

有人可以告诉我我的代码有什么问题

latest_songs,top_songs和hit_songs是arraylist.song()是Parseurl中的一个静态方法,我在那里获取json数组。工作正常&返回适当的数据。

    latest_Songs = ParseUrl.song(url1);
      Log.i("ring,latest=", latest_Songs.toString());
    top_Songs = ParseUrl.song(url2);
      Log.i("ring,top=", top_Songs.toString());
    hit_Songs = ParseUrl.song(url3);
      Log.i("ring,hits=", hit_Songs.toString());

当我运行latest_songs并且top_songs.problem与hit_songs.as一起工作时,它运行正常我在我的项目中写了这个,并且用hits_songs覆盖了arraylist(latest_songs和top_songs)数据。我做错了。

这是ParseUrl,我从每个arraylist中检索数据

public class ParseUrl {
static ArrayList<String> songs_List = new ArrayList<String>();
static ArrayList<String> songs_Names = new ArrayList<String>();
static ArrayList<String> songs_Urls = new ArrayList<String>();

static File tempFiles;
File ringtones;

public static ArrayList<String> song(String url) {
    songs_Names.clear();
    songs_Urls.clear();
    JSONObject json = JsonParse.getSongfromUrl(url);

    try {
        JSONArray latestSongs = json.getJSONArray("ringtones");
        for (int count = 0; count < latestSongs.length(); count++) {
            JSONObject song = latestSongs.getJSONObject(count);
            songs_List.add(song.toString());
            JSONArray name = song.names();
            songs_Names.add(name.toString());
            String songUrl = name.toString();
            String URL = songUrl.substring(2, songUrl.lastIndexOf("\""));
            songs_Urls.add(song.getString(URL));
        }

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

    return songs_Names;

}

2 个答案:

答案 0 :(得分:0)

您是否在任何地方更改url值? 因为您要为所有三个数组列表分配ParseUrl.song(url)。除非url在某处更改,否则所有三个数组列表都将具有相同的值,因为ParseUrl.song(url)将给出相同的结果。

答案 1 :(得分:0)

你的arraylist是你班级中的一个静态变量。所以你的内存中只有一个arraylist。每次调用song方法,你都在修改同一个列表。这意味着你的latest_songs,top_songs,hit_songs,都将指向到同一个名单。这就是你的名单越过骑行的原因。 尝试在方法中创建一个列表并返回它,而不是去寻找静态变量。