#java #android #android-activity #multiline #line-breaks
#java #Android #android-активность #многострочный #разрывы строк
Вопрос:
Я полный новичок, когда дело доходит до кодирования как на Java, так и на Android. Тем не менее, я пытаюсь собрать воедино простой виджет блокнота и приложение. По сути, это виджет, который отображает текст заметки в текстовом представлении и действие, которое можно загрузить, нажав на виджет. В действии у меня есть EditText и две кнопки — одна для сохранения текста заметки и одна для отмены и закрытия действия.
Примером текста примечания, введенного в EditText, может быть:
Купить milk
Kiss girlfriend
Беспокоить Снейпа
Когда я сохраняю данные своих заметок из действия, они сохраняют данные моих заметок во внутреннем файле хранилища. Затем он обновляет виджет, и здесь мой текст заметки отображается с разрывами строк. Но если я затем открою свою активность для редактирования текста, он загружает текст заметки в виде однострочного файла, а не многострочного файла.
У кого-нибудь из вас, ребята, есть предложения о том, что я мог бы сделать, чтобы загрузить мои данные заметок в виде многострочного текста с разрывами строк?
Вот мой код действия:
package dk.mfoller.android.basicnote;
import android.app.Activity;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RemoteViews;
import android.widget.Toast;
import android.widget.EditText;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import java.io.*;
public class BasicNoteActivity extends Activity {
/** Called when the activity is first created. */
private Button saveBtn;
private Button cancelBtn;
private EditText inputTxt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Defines objects
saveBtn = (Button) findViewById(R.id.basicNoteActivity_save);
cancelBtn = (Button) findViewById(R.id.basicNoteActivity_cancel);
inputTxt = (EditText) findViewById(R.id.basicNoteActivity_input);
// Calls a function to update/replace the displayed note text
readNoteData();
// Creates event handler for the save-button
saveBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Calls a function to write to a file
writeToFile();
// Updates the displayed text in the widget
String noteinput = inputTxt.getText().toString();
RemoteViews views = new RemoteViews("dk.mfoller.android.basicnote", R.drawable.main_widget);
views.setTextViewText(R.id.basicNoteWidget_notetext, noteinput);
// Updates the actual widget - NOTE: This updates ALL instances of the widget
ComponentName cn = new ComponentName(getBaseContext(), BasicNoteWidget.class);
AppWidgetManager.getInstance(getBaseContext()).updateAppWidget(cn, views);
}
});
// Creates event handler for the cancel-button
cancelBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
// A function to write to a file
protected void writeToFile() {
String FILENAME = "basicNote_data";
String noteinput = inputTxt.getText().toString();
try {
FileOutputStream fos = openFileOutput(FILENAME, MODE_PRIVATE);
//noteinput.replace("\r", "n");
fos.write(noteinput.getBytes());
fos.close();
// Displays a popup
Toast.makeText(this, "Note saved!", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// A function to read from a file on load
protected void readNoteData() {
String FILENAME = "basicNote_data";
try {
FileInputStream fis = openFileInput(FILENAME);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
// How do I make this load as multiline text?!?!
String line = null;
String output = "";
while((line = br.readLine()) != null) {
output = line;
}
// Updates/replaces the displayed note text
if(output != "") {
inputTxt.setText(output);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Заранее спасибо! .. о, и, пожалуйста, будьте предельно конкретны. Как я уже сказал: я полный новичок 🙂
Ответ №1:
readLine()
Вызов не включает символы конца строки.
Самое быстрое решение — изменить цикл чтения в readNoteData
:
while((line = br.readLine()) != null) {
output = line "n";
}
Вы также можете просто прочитать весь файл и пропустить этот шаг, но сначала заставить его работать.
См. Документы BufferedReader.readLine() для получения дополнительной информации.
Комментарии:
1. Вы Бог послал! Я знал, что это будет что-то довольно простое.. Но как тогда прочитать весь файл целиком?