2016-06-15 2 views
1

저는 Android Studio가 처음입니다. 기본적으로 QR 스캐너에 대한 일종의 기록 파일을 만드는 것입니다. 내가 스캔 한 내용은 History.txt 파일에 저장됩니다. 그것은 작동하지만 내가 의도 한 방식이 아닙니다. 이것은 첫 번째 스캔 후 내역을 확인하는 결과였다 :ListView로 텍스트 파일 읽기 (앱이 ListView에 두 번 추가)?

Result of First Scan

그리고 이것은 내가 두 번째 스캔 검사 할 때 발생하는 것입니다 : 이것은 내 OutputWriter 코드가

Result of Second Scan

입니다 :

try { 
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("History.txt", Context.MODE_APPEND)); 
    outputStreamWriter.write(rawResult.getText()); // the scan result 
    outputStreamWriter.append("\n\r"); 
    outputStreamWriter.close(); 

} catch (IOException e) { 
    Log.e("Exception", "File write failed: " + e.toString()); 
} 

그리고 이것은 기록을 표시하는 활동입니다 :

public class ResultsActivity extends AppCompatActivity { 

    ListView ResultsListView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_results); 
     ResultsListView = (ListView) findViewById(R.id.ResultsListView); 
     readFromFile(); 
    } 

    private String readFromFile() { 

     String ret = ""; 

     ArrayList<String> lines = new ArrayList<>(); // stores lines from text file. 

     try { 
      InputStream inputStream = openFileInput("History.txt"); 

      if (inputStream != null) { 
       InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
       BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
       String receiveString = ""; 
       StringBuilder stringBuilder = new StringBuilder(); 

       while ((receiveString = bufferedReader.readLine()) != null) { 
        stringBuilder.append(receiveString); 
        lines.add(stringBuilder.toString()); 
       } 

       inputStream.close(); 

       // put results in ListView 
       ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, lines); 
       ResultsListView.setAdapter(adapter); 

      } 
     } catch (FileNotFoundException e) { 
      Log.e("Exception", "File not found: " + e.toString()); 
     } catch (IOException e) { 
      Log.e("Exception", "Can not read file: " + e.toString()); 
     } 

     return ret; 
    } 

} 

왜 ListView에 두 가지 항목이 나타나는지 잘 모르겠습니다. 언젠가 그것을 보았지만 아무 것도 보지 못했습니다. 이것이 간단한 오류 일 경우 내 사과. Android Studio에 익숙해지고 있습니다. 어떤 도움이라도 대단히 감사하겠습니다. 고맙습니다.

+0

rawResult.getText() 결과를 아직 확인하셨습니까? 함수 readFromFile()은 괜찮습니다. 나는 당신의 잘못을 생각한다. –

답변

0

것은이 코드 찾고 있어요 :

  while ((receiveString = bufferedReader.readLine()) != null) { 
       stringBuilder.append(receiveString); 
       lines.add(stringBuilder.toString()); 
      } 

당신은 다음 어댑터에 이렇게 몇 줄이 추가 얻을 것이다 여러 번 전체 문자열을 추가 stringBuilder에 한 줄을 추가한다. 나는이 작업을 수행하는 것을 의미 생각 :

  while ((receiveString = bufferedReader.readLine()) != null) { 
       stringBuilder.append(receiveString); 
       lines.add(receiveString); 
      } 

어쩌면 당신이 정말로 stringBuilder 필요하지 않습니다.