как l oop через 2 списка массивов и вернуть количество совпавших предметов и совпавших предметов в firestore? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть ArrayList, где я храню массив элементов указанного поля c документа, и я отправляю его другому действию, как это:

Intent intent = new Intent(ProgramToProgram.this, com.example.newapp.ProgramToProgram1.class);
intent.putExtra("fids", arrayList1);
startActivity(intent);

Я получаю его в другое действие, подобное этому:

arraylist3 = (ArrayList<String>)getIntent().getSerializableExtra("fids");

Теперь у меня есть другой список массивов в этом активе, где я храню другой набор элементов:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        pid = docIds.get(position);

        fgboys1.whereEqualTo("pid", pid)
                .get()
                .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

                        for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                            String fid = documentSnapshot.get("fid").toString();
                            arrayList1.add(fid);
                            arrayAdapter1.notifyDataSetChanged();
                        }

                        Toast.makeText(ProgramToProgram1.this, "FIND OUT REGISTERED OR NOT REGISTERED", Toast.LENGTH_SHORT).show();
                    }
                });
    }
});

Теперь я хочу сравнить элементы arraylist3 и arraylist1 и возвращают количество элементов и аналогичных элементов. Как мне это сделать?

Это то, что я пробовал, но приложение каждый раз вылетает:

registered.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int i;

        arraylist3 = (ArrayList<String>)getIntent().getSerializableExtra("fids");

        for (i = 0; i <arraylist3.size(); i++) {
            if (arraylist3.contains(arrayList1.get(i))) {
                i++;
            }
        }
        tv_reg.setText(i);
    }
});

Это ошибка, показанная в журнале:

  2020-02-12 11:50:19.014 16489-16489/com.example.newapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.newapp, PID: 16489
android.content.res.Resources$NotFoundException: String resource ID #0x0
    at android.content.res.Resources.getText(Resources.java:338)
    at android.widget.TextView.setText(TextView.java:5494)
    at com.example.newapp.ProgramToProgram1$4.onClick(ProgramToProgram1.java:215)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24701)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

1 Ответ

1 голос
/ 12 февраля 2020

В этом коде есть несколько явных ошибок:

public void onClick(View v) {
    int i;

    arraylist3 = (ArrayList<String>)getIntent().getSerializableExtra("fids");

    for (i = 0; i <arraylist3.size(); i++) {
        if (arraylist3.contains(arrayList1.get(i))) {
            i++;
        }
    }
    tv_reg.setText(i);
}

Проблема № 1: вы используете i для двух (конфликтующих) целей: в качестве счетчика и в качестве переменной * oop. Это не сработает.

Проблема № 2: вы, кажется, используете неправильный arrayList размер в:

for (i = 0; i <arraylist3.size(); i++) {

против

arrayList1.get(i)

Если не гарантируется, что два списка всегда имеют одинаковый размер, что может привести к пропуску подсчета некоторых элементов или к исключению индекса за пределами границ (когда i >= arrayList1.size()).


Есть также некоторые проблемы проектирования;

  • Ваши имена переменных неинформативны: arrayList1 и arrayList3 ничего не говорят о значении списков

  • arrayList3 переменная выглядит так, как будто она может / должна быть локальной переменной, а не полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...