Проблема с отображением нескольких строк из внутреннего хранилища
У меня есть этот проект, где он отображает информацию о страховании людей, используя два FloatingActionButtons
этот контроль TextViews
а также EditTexts
, Я пытаюсь сохранить эту информацию во внутреннем / внешнем хранилище мобильного устройства. У меня есть код, просто когда информация отображается все Strings
привязываться как один большой String
, Вот распечатка того, что я имею в виду.
Вот код, который я использовал для FloatingActionButtons
в файле Java называется InsuranceActivity.java
:
//Saves information on the editText fields
FloatingActionButton saveInfo = (FloatingActionButton) findViewById(R.id.saveInfo);
saveInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String InsurerNameStr = InsurerNameEdit.getText().toString();
String MembershipStr = MembershipNoEdit.getText().toString();
String NameStr = NameEdit.getText().toString();
String DOBStr = DOBEdit.getText().toString();
String PostcodeStr = PostcodeEdit.getText().toString();
String file_name = "InsuranceInfo";
try {
FileOutputStream fileOutputStream = openFileOutput(file_name,MODE_PRIVATE);
fileOutputStream.write(InsurerNameStr.getBytes());
fileOutputStream.write(MembershipStr.getBytes());
fileOutputStream.write(NameStr.getBytes());
fileOutputStream.write(DOBStr.getBytes());
fileOutputStream.write(PostcodeStr.getBytes());
fileOutputStream.close();
Toast.makeText(getApplicationContext(), "Information Saved.", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
//Hides EditText and displays TextViews with the information that was saved
FloatingActionButton showInfo = (FloatingActionButton) findViewById(R.id.showInfo);
showInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
InsurerNameEdit.setVisibility(View.GONE);
MembershipNoEdit.setVisibility(View.GONE);
NameEdit.setVisibility(View.GONE);
DOBEdit.setVisibility(View.GONE);
PostcodeEdit.setVisibility(View.GONE);
InsurerName.setVisibility(View.VISIBLE);
MembershipNo.setVisibility(View.VISIBLE);
Name.setVisibility(View.VISIBLE);
DOB.setVisibility(View.VISIBLE);
Postcode.setVisibility(View.VISIBLE);
try {
String InsurerNameStr;
String MembershipStr;
String NameStr;
String DOBStr;
String PostcodeStr;
FileInputStream fileInputStream = openFileInput("InsuranceInfo");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuffer stringBuffer = new StringBuffer();
while ((InsurerNameStr = bufferedReader.readLine()) != null) {
stringBuffer.append(InsurerNameStr);
}
while ((MembershipStr = bufferedReader.readLine()) != null) {
stringBuffer.append(MembershipStr);
}
while ((NameStr = bufferedReader.readLine()) != null) {
stringBuffer.append(NameStr);
}
while ((DOBStr = bufferedReader.readLine()) != null) {
stringBuffer.append(DOBStr);
}
while ((PostcodeStr = bufferedReader.readLine()) != null) {
stringBuffer.append(PostcodeStr);
}
InsurerName.setText(stringBuffer.toString());
MembershipNo.setText(stringBuffer.toString());
Name.setText(stringBuffer.toString());
DOB.setText(stringBuffer.toString());
Postcode.setText(stringBuffer.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Спасибо за вашу помощь заранее.
1 ответ
Ваш код делает именно то, что вы говорите. Вы сначала читаете содержимое файла в StringBuffer
, а затем в строках ниже, вы устанавливаете каждый TextView
отображать содержимое этого StringBuffer
:
InsurerName.setText(stringBuffer.toString());
MembershipNo.setText(stringBuffer.toString());
Name.setText(stringBuffer.toString());
DOB.setText(stringBuffer.toString());
Postcode.setText(stringBuffer.toString());
Если вы хотите каждый TextView
чтобы отобразить что-то другое, вы должны прочитать каждую строку файла отдельно и отобразить содержимое каждой строки в соответствующем TextView
, А еще лучше, сериализуйте данные в формате, подобном JSON, который не зависит от порядка записи, и в котором вы можете легко запрашивать конкретные значения.
РЕДАКТИРОВАТЬ
В вашем случае вы можете попробовать что-то вроде этого:
.
.
.
FileInputStream fileInputStream = openFileInput("InsuranceInfo");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
InsurerName.setText(bufferedReader.readLine());
MembershipNo.setText(bufferedReader.readLine());
.
.
.
Конечно, этот подход предполагает, что ваши файлы всегда будут следовать точному формату, всегда будут иметь правильное количество строк и т. Д. Если пользователь случайно создаст новую строку в EditText
и что впоследствии сохраняется, весь этот подход сломается. Я, вероятно, не буду использовать это в производственном приложении, но этого должно быть достаточно, чтобы указать вам правильное направление.
(Небольшой совет Java, имена переменных никогда не должны начинаться с заглавной буквы; по соглашению, только имена классов / интерфейсов должны начинаться с заглавной буквы.