Android - создать файл журнала и отображать его как TextView в новых строках для каждого события?

Привет, я записываю имя и номера в файл в Android, а затем открываю файл журнала и показываю его в TextView. но я не могу добавить "новую строку" (" \n " ), поэтому он показывает:

Имя1 №1 Имя2 №2 Имя3 №3 Имя4 №4

я получаю "беспорядок" только в одной длинной строке...

я пробую следующее:

.....

addNameAndNrToLogg(stringName, stringNr); //call ..
.....

//save the logging
public void addNameAndNrToLogg(String Name, String Nr) {
            String content = Name + " " + Nr + " " + "\\\n"  + " ";
            content = content.replace("\\\n", System.getProperty("line.separator"));
                try {
                    OutputStreamWriter outputStreamWriter = new OutputStreamWriteropenFileOutput("logg.txt", Context.MODE_APPEND));
                    outputStreamWriter.write(content.toString());
                    outputStreamWriter.close();
                }
                catch (IOException e) {
                    Log.e("Exception", "File write failed: " + e.toString());              
                }

......

loggfil = getLogg(); //open the loggfile and save this to a string (just an ordinary open file...)
          TextView tv = new TextView(this);
          tv.setText(loggfil); // set content to loggfile 
          tv.setMovementMethod(new ScrollingMovementMethod());//make it scrollable
          setContentView(tv); //display it..


.....

// я также пытался добавить \n, \n, \\n, и ничего не устанавливало триггер "новой строки"..

//У тебя есть какие-либо идеи?? :-)

РЕДАКТИРОВАТЬ: я просто хочу быть более точным: у меня есть сейчас, и это не работает :( :

....

public void addMatchToLogg(String Name, String Nr) {

String content = Name + " " + Nr + " " + System.getProperty("line.separator");

try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("logg.txt", Context.MODE_APPEND));
outputStreamWriter.write(content.toString());
outputStreamWriter.close();
}
catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());              
}
....

// then in a other activity i open the logfile and put it in a textView:

loggfil = getLogg();
TextView tv = new TextView(this);
tv.setText(loggfil);

tv.setMovementMethod(new ScrollingMovementMethod());
setContentView(tv);

...
}
..

//then the getLogg():
public String getLogg() {
String loggBuffer = "emty logg";
try {
InputStream inputStream = openFileInput("logg.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);
                }
inputStream.close();
loggBuffer = stringBuilder.toString();
            }

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

результат: Имя1 №1 Имя2 №2 Имя3 №3 Имя4 №4

а не: Имя1 №1 Имя2 №2 Имя3 №3 Имя4 №4

в XML у меня есть:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingTop="20dp"
    android:scrollbarStyle="insideInset"
    android:scrollbars="vertical" >

        <TextView
            android:id="@+id/logg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/emty"
            android:textSize="21sp" 
            android:maxLines="5"
        android:scrollbars="vertical"/>

</LinearLayout>

ПРИМЕЧАНИЕ: и когда я вытаскиваю файл logg.txt из «эмулятора», он «неправильный»/noNewLine: Name1 nr1 Name2 nr2 Name3 nr3 Name4 nr4


отредактировано только для теста и «комментария». Я проверил это: я проверил «принудительное значение строки» с помощью:

Name = "Event:"; 
Nr = "123"; 

а потом:

String content = siteName + "_" + shortDate + "_" ; 
content = content + System.getProperty("line.separator"); 
//(yes I know i probably want to use stringbuilder, or is it a must here?..)

а затем отправить его в журнал, 3 раза, результат:

Событие:_123_Событие:_123_Событие:123

и не:

Событие:123

Событие:123

Событие:123

_________ :-(


person user3245324    schedule 07.07.2014    source источник
comment
То есть в самом файле нет новых строк?   -  person OrhanC1    schedule 09.07.2014
comment
точно :-( Имя1 №1 Имя2 №2 Имя3 №3 Имя4 №4   -  person user3245324    schedule 09.07.2014
comment
Есть ли шанс, что ваш файл будет содержать элементы с пробелами, такие как Имя Один nr1 Имя Два nr2 Имя Три nr3 ?   -  person OrhanC1    schedule 09.07.2014
comment
ВАУ интересно это: testNAME 1 Nr 08 12:58:11 testNAME 2 Nr 08 12:59:16 .. а не: testNAME 1 Nr 08 12:58:11 testNAME 2 Nr 08 12:59:16 .. Я тестировал для принудительного значения строк с помощью: Name = Event:; № = 123; а затем: String content = siteName + + shortDate + ; контент = контент + System.getProperty(line.separator); а потом отправить в лог, 2 раза, результат: Событие:_123_Событие:_123_Событие:_123_ а не: Событие:_123_ +новая строка Событие:_123_ +новая строка Событие:_123_ +новая строка   -  person user3245324    schedule 10.07.2014
comment
примечание: возможно ли написать журнал так, чтобы последнее имя было первым, а не последним?:   -  person user3245324    schedule 10.07.2014


Ответы (2)


Попробуй это

String content = Name + " " + Nr + " " + System.getProperty("line.separator") + " ";
person vikki    schedule 07.07.2014

После большого количества тестов я пришел к выводу, что неправильно добавлять новую строку в файл, как я делал раньше:

String content = Name + " " + Nr + " " + System.getProperty("line.separator");

(а затем сохраните его в файл, а затем прочитайте..)

строка и файл, вероятно, имеют "2 разных и одинаковых строки.разделитель" :-)

Итак, мое решение:

String content = siteName + " " + shortDate + "//n" ; 
//the "//n" is just a "MARKER" for later..
content = content.replaceAll("  ", " "); //just for nice things up..
//and save to file...
.....

//then when the textview want to display this:
// after the file have revived using getLogg()
        loggfil = getLogg();
//then i look after the MARKER: "//n" and replace this..
        loggfil = loggfil.replaceAll("//n", System.getProperty("line.separator"));

          TextView tv = new TextView(this);
          tv.setText(loggfil);
          tv.setMovementMethod(new ScrollingMovementMethod());
          setContentView(tv);  

результат: в файле: Имя1 Nr1//nИмя2 Nr2//nИмя3 Nr3//nИмя4 Nr4//n

в «сохраненном журнале строк» ​​Имя1 №1 Имя2 №2 Имя3 №3 Имя4 №4

Я так РАД, наконец!!! :-D

но все же: можно ли написать "logg" так, чтобы "последнее имя" было первым, а не последним? я использую:

            try {
                    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("logg.txt", 
                            Context.MODE_APPEND));
                    outputStreamWriter.write(content.toString());
                    //outputStreamWriter.write("test", 0, 4);
                    outputStreamWriter.close();
                }
                catch (IOException e) {
                    Log.e("Exception", "File write failed: " + e.toString());              
                }
person user3245324    schedule 10.07.2014