-8

谁能告诉我我的代码有什么问题

latest_songs、top_songs 和 hit_songs 是 arraylist.song() 是 Parseurl 中的静态方法,我在其中获取 json array.it 工作正常并返回正确的数据。

    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 一起运行时,它工作正常。因为我在我的项目中写了这个,arraylist(latest_songs 和 top_songs)数据都被 hits_songs 覆盖。我做错了。

这是 ParseUrl,我从中检索每个数组列表中的数据

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;

}
4

2 回答 2

0

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

于 2013-10-04T07:18:18.290 回答
0

你的arraylist是你类中的一个静态变量。所以内存中只有一个arraylist。每次调用song方法时,你都在修改同一个列表。这意味着你的latest_songs、top_songs、hit_songs都将指向同一个列表.这就是你的名单越来越多的原因。尝试在您的方法中创建一个列表并将其返回,而不是使用静态变量。

于 2013-10-04T08:25:49.217 回答