У меня возникли проблемы с попыткой сохранить внутреннюю строку пользователя на устройствах Android. Мой код написан, чтобы сохранить имя пользователя и прочитать его в строке, а затем отобразить эту строку в текстовом поле тоста. У меня возникают ошибки при создании файла bold_username.txt. Вот мой код:
package hello.tab.widget;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class DisclaimerActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.disclaimer);
final EditText et = (EditText)findViewById(R.id.et_username);
et.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
et.setText("");
}
});
final Button button = (Button) findViewById(R.id.btn_accept);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final CheckBox checkBox = (CheckBox)findViewById(R.id.cb_disclaimer);
if (checkBox.isChecked()) {
String username = et.getText().toString();
String FILENAME = "bold_username.txt";
try {
FileOutputStream fos = new FileOutputStream(new File("bold_username.txt"));
fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(username.getBytes());
fos.close();
InputStream inputStream = new FileInputStream("bold_username.txt");
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
Toast.makeText(DisclaimerActivity.this, line,
Toast.LENGTH_SHORT).show();
}
}
catch (IOException e){
e.printStackTrace();
}
}
else {
Toast.makeText(DisclaimerActivity.this, "Please Check the
Checkbox", Toast.LENGTH_SHORT).show();
}
}
});
}
public void onCheckboxClicked(View v) {
}
}
Если у вас нет причины хранить имя пользователя в файле, лучше использовать SharedPreferences для хранения такой информации. SharedPreferences позволяет вам сохранять настройки и другие общие сведения о вашем приложении, он автоматически доступен для любого класса Activity и обрабатывает все чтение и запись для вас. Значения, хранящиеся в SharedPreferences, доступны только для приложения, которое их создает, поэтому оно также обеспечивает уровень безопасности. SharedPreferences хранятся в файловой системе Android при настройке значений, и они автоматически загружаются всякий раз, когда выполняется ваше приложение.
Вот пример, где вы можете узнать и узнать значение Username в SharedPreferences...
// For reading preferences
SharedPreferences reader = PreferenceManager.getDefaultSharedPreferences(this.getContext());
// For writing preferences
Editor writer = reader.edit();
// Store the username in the preferences
writer.putString("Username","Fred");
writer.commit();
// Get the username from the preferences
String username = reader.getString("Username",""); // the "" at the end says to return "" if the Username isn't set yet
Довольно просто.
Попробуй это
//Write the data
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
OutputStreamWriter out = new OutputStreamWriter(fos);
out.write(username);
out.flush();
out.close();
Read the data
FileInputStream fis = openFileInput(FILENAME);
InputStreamReader in = new InputStreamReader(fis);
BufferedReader r = new BufferedReader(in);
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
Log.i("TEMP", line);
total.append(line);
}
Toast.makeText(MainActivity.this, total.toString(),
Toast.LENGTH_SHORT).show();