stacktrace E/UncaughtException:java.lang.IndexOutOfBoundsException:索引1无效
我正在开发一款带有firebase排行榜的android应用程序,它运行良好,但当我点击排行榜时崩溃, 这是堆栈跟踪日志, 我得到2个错误: E/UncaughtException:java.lang.IndexOutOfBoundsException:索引1无效,大小为1 E/AndroidRuntime:致命异常:主stacktrace E/UncaughtException:java.lang.IndexOutOfBoundsException:索引1无效,java,android,indexoutofboundsexception,leaderboard,Java,Android,Indexoutofboundsexception,Leaderboard,我正在开发一款带有firebase排行榜的android应用程序,它运行良好,但当我点击排行榜时崩溃, 这是堆栈跟踪日志, 我得到2个错误: E/UncaughtException:java.lang.IndexOutOfBoundsException:索引1无效,大小为1 E/AndroidRuntime:致命异常:主 12-02 01:05:53.969 3508-3508/com.example.myapp E/UncaughtException: java.lang.IndexOutOf
12-02 01:05:53.969 3508-3508/com.example.myapp E/UncaughtException: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.example.myapp.activity.LeaderboardActivity$4.onChildAdded(LeaderboardActivity.java:167)
at com.google.android.gms.internal.zzaer.zza(Unknown Source)
at com.google.android.gms.internal.zzagp.zzSu(Unknown Source)
at com.google.android.gms.internal.zzags$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
12-02 01:05:54.215 3508-3508/com.example.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapp, PID: 3508
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.examle.myapp.activity.LeaderboardActivity$4.onChildAdded(LeaderboardActivity.java:167)
at com.google.android.gms.internal.zzaer.zza(Unknown Source)
at com.google.android.gms.internal.zzagp.zzSu(Unknown Source)
at com.google.android.gms.internal.zzags$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
两条蓝线都表示leaderboardactivity.java中这一行有错误
if (leaderboards.get(1).getName().equalsIgnoreCase(displayName)) {
private void getLeaderboard() {
databaseLeaderboard.orderByChild("score").limitToLast((int) totalValue).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
Leaderboard leaderboard = dataSnapshot.getValue(Leaderboard.class);
leaderboards.add(leaderboard);
if (leaderboards.size() >= (int) totalValue) {
Collections.reverse(leaderboards);
leaderboardAdapterNew.notifyDataSetChanged();
}
if (leaderboards.size() == totalValue) {
if (leaderboards.get(0).getName().equalsIgnoreCase(displayName)) {
txtUname1.setText("Me");
} else {
txtUname1.setText(leaderboards.get(0).getName());
}
if (leaderboards.get(1).getName().equalsIgnoreCase(displayName)) {
txtUname2.setText("Me");
} else {
txtUname2.setText(leaderboards.get(1).getName());
}
if (leaderboards.get(2).getName().equalsIgnoreCase(displayName)) {
txtUname3.setText("Me");
} else {
txtUname3.setText(leaderboards.get(2).getName());
}
下面是leaderboardactivity.java中的代码片段
if (leaderboards.get(1).getName().equalsIgnoreCase(displayName)) {
private void getLeaderboard() {
databaseLeaderboard.orderByChild("score").limitToLast((int) totalValue).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
Leaderboard leaderboard = dataSnapshot.getValue(Leaderboard.class);
leaderboards.add(leaderboard);
if (leaderboards.size() >= (int) totalValue) {
Collections.reverse(leaderboards);
leaderboardAdapterNew.notifyDataSetChanged();
}
if (leaderboards.size() == totalValue) {
if (leaderboards.get(0).getName().equalsIgnoreCase(displayName)) {
txtUname1.setText("Me");
} else {
txtUname1.setText(leaderboards.get(0).getName());
}
if (leaderboards.get(1).getName().equalsIgnoreCase(displayName)) {
txtUname2.setText("Me");
} else {
txtUname2.setText(leaderboards.get(1).getName());
}
if (leaderboards.get(2).getName().equalsIgnoreCase(displayName)) {
txtUname3.setText("Me");
} else {
txtUname3.setText(leaderboards.get(2).getName());
}
有人能告诉我哪里是我的错吗?是的,您试图访问一个不存在的索引: 更改此项:
if (leaderboards.size() == totalValue) {
为此:
if (leaderboards.size() == totalValue && totalValue > 2) {
你的排行榜。get(1)一无所获。这就是为什么你会遇到这个错误。你正在访问一个数组中的索引1,该数组只包含1项(因此最高的合法索引为0)。请检查下面的答案。我不认为上面的代码是对崩溃的指责。你能分享你的适配器吗?LeadboardActivity.java第167行?下次请尝试正确格式化你的代码,它将帮助其他人回答你的问题。谢谢。兄弟,谢谢你帮我做作业。事实上,我不是一个开发人员,我从codecanyon购买了这个项目,现在作者没有回复我的消息,所以最后在3天后我在stackoverflow上问了这个问题。谢谢你