我只是编写了一个简单的应用程序,当我运行它时
我收到此错误
2019-05-16 15:12:46.079 6879-6879/net.perkglobal.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.perkglobal.myapplication, PID: 6879
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.perkglobal.myapplication/net.perkglobal.myapplication.MainActivity}: java.lang.IllegalArgumentException: Not an array: class java.util.ArrayList
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalArgumentException: Not an array: class java.util.ArrayList
at java.lang.reflect.Array.notAnArray(Array.java:823)
at java.lang.reflect.Array.get(Array.java:210)
at net.perkglobal.myapplication.MainActivity.onCreate(MainActivity.java:91)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
根据该错误,第91行出现错误,因此我尝试更改它,但似乎无济于事 有人可以告诉我该怎么做
这是代码中有错误的一部分
TextView text= findViewById(R.id.WP);
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
list.add("H");
list.add("I");
list.add("J");
list.add("K");
list.add("L");
list.add("M");
list.add("N");
list.add("O");
list.add("P");
list.add("Q");
list.add("R");
list.add("S");
list.add("T");
list.add("U");
list.add("V");
list.add("W");
list.add("X");
list.add("Y");
list.add("Z");
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("i");
list.add("j");
list.add("k");
list.add("l");
list.add("m");
list.add("n");
list.add("o");
list.add("p");
list.add("q");
list.add("r");
list.add("s");
list.add("t");
list.add("u");
list.add("v");
list.add("w");
list.add("x");
list.add("y");
list.add("z");
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
list.add("0");
list.add(" "); for (int n=0 ;n<64;n++){
String string = Array.get(list,n).toString();
text.setText(string);}
答案 0 :(得分:1)
您使用的方法需要一个数组,例如outlined in the documentation。而且ArrayList不是数组-但SomeType[]
是。老实说,当ArrayList拥有自己的get方法时,我看不出为什么要使用它。如果出于某种原因想要/需要使用该方法,则需要创建一个数组。
实际上,您有两个简单的选项,不需要手动调用ArrayList之外的任何方法:
for (int n = 0; n < list.size; n++){ // Avoid hardcoding sizes.
String string = list.get(i);
<your code here>
}
或者:
for (String string : list) {
<your code here>
}
并且如其他答案所述,您还可以使用手动迭代器方法。
但是根据您的代码,您还会遇到第二个问题:setText
将更改内容,而不是附加内容。这使循环毫无意义。如果您只想要最后一个(或特定索引),只需将其缩减为:
text.setText(list.get(list.size() - 1));
如果要附加文本,请使用the append method:
<for loop> {
text.append(string);
}
<for loop>
是您选择的类型。
答案 1 :(得分:0)
将您的for循环更改为此
Iterator i = list.iterator();
while (i.hasNext()) {
Log.d("string",i.next())
//your code goes here
}