0

Ich habe dieses Projekt, wo es eine Personenversicherung Informationen unter Verwendung von zwei FloatingActionButtons zeigt, die TextViews und EditTexts steuern. Ich versuche, diese Informationen im internen/externen Speicher eines mobilen Geräts zu speichern. Ich habe den Code ist nur, dass, wenn die Informationen angezeigt werden alle Strings als eine große String angeschlossen werden. Hier ist ein Druckbildschirm von dem, was ich meine.Problem mit der Anzeige mehrerer Zeichenfolgen aus dem internen Speicher

As you can see all the strings that should be in their correspondent places are all in one big string that gets displayed in all the <code>TextViews</code>.

Hier ist der Code, den ich für die FloatingActionButtons in der Java-Datei InsuranceActivity.java genannt verwendet:

//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(); 
      } 
     } 
    }); 

Vielen Dank für Ihre Hilfe im Voraus.

Antwort

0

Ihr Code macht genau das, was Sie ihm sagen. Lesen Sie zunächst den Inhalt der Datei in eine StringBuffer, und dann in den folgenden Zeilen, setzen Sie sich TextView den Inhalt dieses StringBuffer anzuzeigen:

InsurerName.setText(stringBuffer.toString()); 
MembershipNo.setText(stringBuffer.toString()); 
Name.setText(stringBuffer.toString()); 
DOB.setText(stringBuffer.toString()); 
Postcode.setText(stringBuffer.toString()); 

Wenn Sie jeder wollen TextView etwas anderes angezeigt werden, sollten Sie Lesen Sie jede Zeile der Datei separat und zeigen Sie den Inhalt jeder Zeile in der entsprechenden TextView an. Besser noch, serialisieren Sie die Daten in einem Format wie JSON, das nicht von der Schreibreihenfolge abhängig ist und dass Sie leicht nach bestimmten Werten suchen können.

EDIT

In Ihrem Fall könnten Sie so etwas wie dies versuchen:

. 
. 
. 
FileInputStream fileInputStream = openFileInput("InsuranceInfo"); 
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); 
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

InsurerName.setText(bufferedReader.readLine()); 
MembershipNo.setText(bufferedReader.readLine()); 
. 
. 
. 

Natürlich ist dieser Ansatz geht davon aus, dass Ihre Dateien immer das genaue Format folgen, immer die richtige Anzahl von Linien usw. Wenn der Benutzer zufällig eine neue Zeile in einem EditText erstellt und diese anschließend gespeichert wird, wird dieser gesamte Ansatz unterbrochen. Ich würde das wahrscheinlich nicht in einer Produktions-App verwenden, aber es sollte ausreichen, um Sie in die richtige Richtung zu weisen.

(Minor Java Spitze, Variablennamen sollten nie mit einem Großbuchstaben beginnen, durch Konvention, nur die Klasse/Interface-Namen sollten mit einem Startkapital

+0

Ihnen für Ihre Hilfe danken Ich weiß nicht, ob ich.! Ich frage nach zu viel hier, aber gibt es irgendein Beispiel, das ich haben könnte, um etwas anderes in jedem TextView anzuzeigen, oder könnten Sie mir in die richtige Richtung zeigen? Ich bin ziemlich neu in diesem. –

+0

Ich weiß es nicht wirklich Wie viel mehr könnte ich sagen, wenn Sie in jeder 'TextView' etwas anderes anzeigen wollen, müssen Sie jedem über 'setText()' eine andere Zeichenkette übergeben. In Ihrem Fall möchten Sie eine Linie, setze diese Zeile als Text der entsprechenden 'TextView', und wiederhole das. Ich kann versuchen, in einem Beispiel zu editieren. –