我有问题。我有一些CryptoCurrencies。它们存储在列表中,现在我想在屏幕上显示它们。我的想法是只为每个硬币添加一个LinearLayout到布局中。这是我的LiveCoinPrice.axml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="#edf0f4">
<LinearLayout
android:id="@+id/CoinPriceLayout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#edf0f4"
android:orientation="vertical"
android:paddingTop="2dp"
android:gravity="center"
android:layout_gravity="center">
<TextView
android:id="@+id/txtCoinName"
android:textColor="#000000"
android:layout_width="match_parent"
android:text="CoinName"
android:textColorHint="#ffffff"
android:layout_height="wrap_content"
android:gravity="center"
android:textStyle="bold" />
<TextView
android:id="@+id/txtCoinPrice"
android:textColor="#000000"
android:layout_width="match_parent"
android:text="CoinPrice"
android:textColorHint="#ffffff"
android:layout_height="wrap_content"
android:gravity="center" />
</LinearLayout>
</LinearLayout>
这是我尝试的代码:
InflatedCoinPriceLayout = LayoutInflater.Inflate(Resource.Layout.LiveCoinPrice, null);
CoinPriceLayout = InflatedCoinPriceLayout.FindViewById<LinearLayout>(Resource.Id.CoinPriceLayout);
LiveCoinName = InflatedCoinPriceLayout.FindViewById<TextView>(Resource.Id.txtCoinName);
LiveCoinPrice = InflatedCoinPriceLayout.FindViewById<TextView>(Resource.Id.txtCoinPrice);
然后在获取硬币的函数中执行以下操作:
int index = 0;
foreach (var coin in coinList)
{
index += 1;
LiveCoinName.Text = coin.Coin;
LiveCoinPrice.Text = coin.Price.ToString();
CoinPriceLayout.AddView(InflatedCoinPriceLayout, index);
}
但这在最后一行给了我这个错误:
java.lang.StackOverflowError:堆栈大小8MB
我在做什么错了?
PS:我只有3个硬币!
答案 0 :(得分:0)
当Java应用程序调用函数调用时,将在调用堆栈上分配一个堆栈框架。堆栈框架包含调用的方法的参数,其本地参数以及方法的返回地址。返回地址表示执行点,从该执行点开始,在调用的方法返回后,程序将继续执行。如果没有足够的空间用于新的堆栈框架,则Java虚拟机(JVM)会引发StackOverflowError
我想您的代码实际上对于每个循环都像a一样工作,没有中断条件。 最简单的解决方案是仔细检查堆栈跟踪并检测行号的重复模式。这些行号表示要递归调用的代码。一旦检测到这些行,就必须仔细检查代码并了解为什么递归永远不会终止。