java.lang.UnsupportedOperationException 错误 ArrayAdapter
java.lang.UnsupportedOperationException Error ArrayAdapter
我有一个 MultiAutoCompleteTextView,其中的数据取自 Firestore。当我在 ArrayAdapter 中设置数据时,出现如下错误。我遵循了以下方法 ,但我仍然很困惑我应该把 Arrays.asList 放在我的代码中的什么地方。
错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.learn.count, PID: 21871
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:404)
at java.util.AbstractList.add(AbstractList.java:425)
at android.widget.ArrayAdapter.add(ArrayAdapter.java:179)
at com.learn.count.addproducts.AddItems.onComplete(AddItems.java:147)
at com.google.android.gms.tasks.zzj.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)
MultiAutoCompleteTextView 代码:
String[] arrayUoM = new String[]{null};
ArrayAdapter<String> adapterUoM = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayUoM);
// Check if document is available
collectionUoM.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot documentSnapshot : task.getResult()) {
if (task.getResult().isEmpty()) {
Log.e("TAG", "UoM not available");
} else {
String getName = documentSnapshot.getString("uoMName");
adapterUoM.add(getName);
}
}
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(AddItems.this, "Error : " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
MultiCompleteUoM.setAdapter(adapterUoM);
MultiCompleteUoM.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
实际上您的代码中存在多个问题。
问题 - 1: 您已使用 null
的数组初始化 ArrayAdapter
,导致 NullPointerExceptio
。
问题 - 2: 您已使用字符串数组 String[]
创建 ArrayAdapter
。 ArrayAdapter
在被数组初始化时,将数组转换为无法修改的 AbstractList
(列表)。因此,当您尝试将 add
项目添加到 ArrayAdapter
.
时,它会导致 UnsupportedOperationException
解决方法: 要解决这两个问题,您必须使用 ArrayList
而不是数组。
ArrayList<String> arrayUoM = new ArrayList<>();
我有一个 MultiAutoCompleteTextView,其中的数据取自 Firestore。当我在 ArrayAdapter 中设置数据时,出现如下错误。我遵循了以下方法 ,但我仍然很困惑我应该把 Arrays.asList 放在我的代码中的什么地方。
错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.learn.count, PID: 21871
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:404)
at java.util.AbstractList.add(AbstractList.java:425)
at android.widget.ArrayAdapter.add(ArrayAdapter.java:179)
at com.learn.count.addproducts.AddItems.onComplete(AddItems.java:147)
at com.google.android.gms.tasks.zzj.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)
MultiAutoCompleteTextView 代码:
String[] arrayUoM = new String[]{null};
ArrayAdapter<String> adapterUoM = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayUoM);
// Check if document is available
collectionUoM.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot documentSnapshot : task.getResult()) {
if (task.getResult().isEmpty()) {
Log.e("TAG", "UoM not available");
} else {
String getName = documentSnapshot.getString("uoMName");
adapterUoM.add(getName);
}
}
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(AddItems.this, "Error : " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
MultiCompleteUoM.setAdapter(adapterUoM);
MultiCompleteUoM.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
实际上您的代码中存在多个问题。
问题 - 1: 您已使用 null
的数组初始化 ArrayAdapter
,导致 NullPointerExceptio
。
问题 - 2: 您已使用字符串数组 String[]
创建 ArrayAdapter
。 ArrayAdapter
在被数组初始化时,将数组转换为无法修改的 AbstractList
(列表)。因此,当您尝试将 add
项目添加到 ArrayAdapter
.
UnsupportedOperationException
解决方法: 要解决这两个问题,您必须使用 ArrayList
而不是数组。
ArrayList<String> arrayUoM = new ArrayList<>();