我收到此StackOverFlow错误,我完全理解,但问题是我不处理大数据,那么如何产生这个错误呢?
我有一个活动,Framelayout,一个片段,3个选项。
在片段中,当你点击其中一个选项时,它重新创建片段并放置随机数,MAX为15
,所以它不是那么大,当用户点击这样就会发生这个错误快速选择导致此溢出的选项。
这是生成的代码,有关"增强"的任何想法它?我不知道这个代码对于momery使用是否是一种不好的做法。
private static List<Integer> SavedNumbers;
public static void SetupSavedNumbersLIst(){
SavedNumbers = new ArrayList<>();
}
static List<Integer> range;
private static void AddDiff(int mMAX){
range = new ArrayList<>();
for(int i = 0 ; i < mMAX ; i++){
range.add(i);
}
range.removeAll(SavedNumbers);
}
private static int ReturnIfDuplic(int mMAX){
AddDiff(mMAX);
return new Random().nextInt(range.size());
}
public static int ReturnUniqueSavedNumber(int mMAX){
int Random = ReturnRandom(mMAX);
if(SavedNumbers != null && SavedNumbers.size() > 0) {
if(DoesSavedNumberExist(Random)){
return ReturnIfDuplic(mMAX);
} else {
SavedNumbers.add(Random);
return Random;
}
} else if (SavedNumbers != null && SavedNumbers.size() == 0){
SavedNumbers.add(Random);
return Random;
} else if( SavedNumbers == null){
SetupSavedNumbersLIst();
return ReturnUniqueSavedNumber(mMAX);
} else {
return 1;
}
}
private static boolean DoesSavedNumberExist(int Number){
for(int s: SavedNumbers){
if(Number == s)
return true;
}
return false;
}
private static int ReturnRandom(int mMAX){
return new Random().nextInt(mMAX);
}
答案 0 :(得分:5)
如果您碰巧随机使用已保存的相同号码,则此行会递归:
if(DoesSavedNumberExist(Random)){
return ReturnUniqueSavedNumber(mMAX);
}
如果你已经保存了1-15,并且你的最大值是15,这将保证堆栈溢出,因为它永远不会满足if语句。这通常也是“随机数不好,只是再试一次”的坏方法,因为随着您添加越来越多的数字,您将添加越来越多的递归。更好的方法可能是将随机数用作可选数字的索引。
答案 1 :(得分:0)
我遇到同样的问题堆栈大小8MB。当我点击我的添加项api得到相同的错误。我认为这是在从编辑文本中获取值时发生的。这样我就可以改变方式,在服务电话
之前获取additem
中的值
$(document).ready(function(){
$(".additem").on("click", function(){
var val = $("input").val();
if(val!=="") {
var elem = $("<li></li>").text(val);
$(".list-item").append(elem);
$("input").val("");
}
});
$(".removeitem").on("click", function() {
$(".list-item li:last-child").remove();
});
});
改装电话
inIT();
使用此我解决了我的堆栈大小8mb错误。
答案 2 :(得分:0)
当我尝试使用intent.putExtra()
传递许多值时,我遇到了同样的问题。
我通过将所有数据保存在共享首选项中解决了这个问题。然后,您可以在以后的部分中访问应用程序中所需的任何片段或活动。
Refer this question to learn more about saving data using shared preferences.