我有一个递归函数,但我想在ArrayList中添加(并保存)以前的数据。
我目前正在这样做,但它没有保存:
private ArrayList<String> checkNextPage(String urlGoogleToken){
ArrayList<String> listTokenFunction = new ArrayList<String>();
try
{
/* I AM DOING SOME STUFF */
if (jsonObj.has("next_page_token")){
String next_page_token = (String) jsonObj.get("next_page_token");
listTokenFunction.add(next_page_token); // I WANT TO SAVE THIS LIST
String result = urlGoogleToken.split("&pagetoken=")[0];
String urlGoogleMaps2 = result+"&pagetoken="+next_page_token;
checkNextPage(urlGoogleMaps2); // CALL THE FUNCTION
} else {
System.out.println("ELSE");
}
} catch (Exception e) {
e.printStackTrace();
}
return listTokenFunction;
}
感谢您的帮助!
答案 0 :(得分:2)
在您的代码中,每次递归调用该方法都会创建自己的ArrayList
作为局部变量。解决此问题的一种方法是更改方法,以便将(最初为空)ArrayList
作为输入并填充它。每个递归调用都将列表作为输入并添加到其中。
private void checkNextPage(ArrayList<String> listTokenFunction, String urlGoogleToken){
// initialize if null
if(listTokenFunction == null) {
listTokenFunction = new ArrayList<String>();
}
try
{
/* I AM DOING SOME STUFF */
if (jsonObj.has("next_page_token")){
String next_page_token = (String) jsonObj.get("next_page_token");
listTokenFunction.add(next_page_token); // I WANT TO SAVE THIS LIST
String result = urlGoogleToken.split("&pagetoken=")[0];
String urlGoogleMaps2 = result+"&pagetoken="+next_page_token;
checkNextPage(urlGoogleMaps2, listTokenFunction); // CALL THE FUNCTION
} else {
System.out.println("ELSE");
}
} catch (Exception e) {
e.printStackTrace();
}
}
该方法可以有void
返回类型,因为列表将在内部填充,无需返回。
答案 1 :(得分:2)
您在方法中创建一个新的ArrayList。 ArrayList<String> listTokenFunction = new ArrayList<String>();
,因此“旧”列表会丢失,当您添加条目时,它将始终是第一个。尝试将方法之外的Arraylist初始化为类变量。