Я хочу записать содержимое 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.Если это не нравится, терпите меня, так как это мой первый пост.