Как я могу найти значение из EditText в CSV (если оно существует) с openCSV и перезаписать его с Java? - PullRequest
0 голосов
/ 27 июня 2019

Я хочу записать содержимое 4 EditTexts в .csv нажатием кнопки.Если 2 из этих EditTexts содержат что-то, что уже находится в строке в .csv, я хочу перезаписать эту строку этими 4 EditTexts.Как я могу найти эти дубликаты?

Я пробовал следующее, но код никогда не достигает условия if внутри цикла, хотя он записывает все из allElements в Logcat:

for(String[] str : allElements){

                Log.e("allElements", Arrays.toString(str));

                if(allElements.contains(url.getText().toString())){

                    Log.e("Double Entry", url.getText().toString());

                }
            }

Вот минимальный воспроизводимый пример:

public void onSaveClicked(View view) throws IOException {

        EditText url = findViewById(R.id.etUrl);
        EditText username = findViewById(R.id.etUsername);
        EditText length = findViewById(R.id.etLength);
        EditText version = findViewById(R.id.etVersion);

        File passwordDir = new File("/data/data/com.example.keygenerator/files");
        File passwordFile = new File(passwordDir, "password.csv");

        CSVReader csvReader = new CSVReader(new FileReader(passwordFile));
        List<String[]> allElements = csvReader.readAll();
        String[] newLine = new String[4];

        if (!url.getText().toString().trim().equals("") && !username.getText().toString().trim().equals("")) {

            newLine[0] = url.getText().toString();
            newLine[1] = username.getText().toString();
            newLine[2] = version.getText().toString();
            newLine[3] = length.getText().toString();

            //here I would try to remove the duplicate-line



            allElements.add(newLine);


            CSVWriter csvWriter = new CSVWriter(new FileWriter(passwordFile));
            csvWriter.writeAll(allElements);
            csvWriter.close();


            Toast.makeText(this, "Entry Added!", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "Some Fields are empty!",
                    Toast.LENGTH_LONG).show();
        }
    }

, а вот .xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tvVersion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="@string/version"
        android:textColor="#000000"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etUsername" />

    <EditText
        android:id="@+id/etVersion"
        android:layout_width="61dp"
        android:layout_height="44dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:ems="10"
        android:importantForAutofill="no"
        android:inputType="number"
        android:text="1"
        android:textColor="#000000"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tvVersion" />

    <TextView
        android:id="@+id/tvLength2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Length"
        android:textColor="#000000"
        android:textSize="18sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etUsername" />

    <EditText
        android:id="@+id/etLength"
        android:layout_width="61dp"
        android:layout_height="44dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:importantForAutofill="no"
        android:inputType="number"
        android:text="@string/defaultPasswordLength"
        android:textColor="#000000"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tvLength2" />

    <TextView
        android:id="@+id/tvUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="@string/sUri"
        android:textColor="#000000"
        android:textSize="18sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/etUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="@string/uriExample"
        android:inputType="textUri"
        android:textColor="#000000"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tvUrl" />

    <TextView
        android:id="@+id/tvUsername"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="@string/sUsername"
        android:textColor="#000000"
        android:textSize="18sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etUrl" />

    <EditText
        android:id="@+id/etUsername"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="@string/enterUsername"
        android:importantForAutofill="no"
        android:textColor="#000000"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tvUsername" />


    <Button
        android:id="@+id/bSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:onClick="onSaveClicked"
        android:text="@string/save"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/bBack"
        app:layout_constraintTop_toBottomOf="@+id/etLength" />

    <Button
        android:id="@+id/bBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:onClick="onBackClicked"
        android:text="Back"
        app:layout_constraintEnd_toStartOf="@+id/bSave"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etLength" />


</android.support.constraint.ConstraintLayout>

Ожидаемый результат: нет двойных записей в csv

Фактические результаты: двойные записи или даже дублирование всех записей.

Я думаю, что правильным способом является чтение содержимого csv и сохранение его в списке, чтобы я мог манипулировать списком (например,удалить строку).После этого я могу записать список в пустой файл.

Я надеюсь, что этот пост удовлетворяет критериям публикации вопроса в stackoverflow.Если это не нравится, терпите меня, так как это мой первый пост.

...