java .lang.UnsupportedOperationException Ошибка ArrayAdapter - PullRequest
0 голосов
/ 11 января 2020

У меня есть 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$4.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 Ответ

1 голос
/ 11 января 2020

На самом деле в вашем коде несколько проблем.

Проблема - 1: Вы инициализировали ArrayAdapter с массивом null, что привело к NullPointerExceptio.

Проблема - 2: Вы использовали массив String String[] для создания ArrayAdapter. ArrayAdapter, будучи инициализированным массивом, преобразует массив в AbstractList (Список), который не может быть изменен. Следовательно, это вызывает UnsupportedOperationException, когда вы пытаетесь add пункт до ArrayAdapter.

Решение: Чтобы решить обе проблемы, вы должны использовать ArrayList вместо массив.

ArrayList<String> arrayUoM = new ArrayList<>();
...