我一直在尝试创建一个可以保存您在文本框中输入的文本的应用程序,然后单击按钮进行保存,但每当我尝试在应用程序中保存文本时,它都无法执行此操作。例如,我输入" Joe smith 123"在文本框中,单击“保存”按钮,然后退出应用程序。一个完整的退出,甚至去标签并从那里删除它。但是当我重新打开应用程序时,我输入的文本就不存在了。这是xml和类文件的代码。
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.rad.passwordstorage3.Storage">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SAVE PASSWORDS"
android:id="@+id/save"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="saveClicked"/>
<EditText
android:id="@+id/textbox"
android:singleLine="false"
android:gravity="top"
android:lines="10"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="none" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Enter your passwords in the textbox!"
android:id="@+id/textView"
android:layout_marginTop="41dp"
android:layout_below="@+id/save"
android:layout_centerHorizontal="true" />
</RelativeLayout>
班级:
package com.example.rad.passwordstorage3;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Storage extends AppCompatActivity {
/** Called when the activity is first created. */
public void readFileInEditor()
{
try {
InputStream in = openFileInput(STORETEXT);
if (in != null) {
InputStreamReader tmp=new InputStreamReader(in);
BufferedReader reader=new BufferedReader(tmp);
String str;
StringBuilder buf=new StringBuilder();
while ((str = reader.readLine()) != null) {
buf.append(str+"n");
}
in.close();
txtEditor.setText(buf.toString());
}
}
catch (java.io.FileNotFoundException e) {
// that's OK, we probably haven't created it yet
}
catch (Throwable t) {
Toast
.makeText(this, "Exception: "+t.toString(), Toast.LENGTH_LONG)
.show();
}
}
private final static String STORETEXT="storetext.txt";
private EditText txtEditor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_storage);
txtEditor=(EditText)findViewById(R.id.textbox);
}
public void saveClicked(View v) {
try {
OutputStreamWriter out=
new OutputStreamWriter(openFileOutput(STORETEXT, 0));
out.write(txtEditor.getText().toString());
out.close();
Toast
.makeText(this, "Your passwords have been saved!", Toast.LENGTH_LONG)
.show();
}
catch (Throwable t) {
Toast
.makeText(this, "Exception: "+t.toString(), Toast.LENGTH_LONG)
.show();
}
}
}
我的保存方法或其他方面有什么问题吗? 感谢。
答案 0 :(得分:3)
当你完成并关闭你的应用程序时,它的状态会在那一刻消失。如果您想要恢复该文字,则需要再次加载&#39; .txt&#39;在onCreate
方法中。
然而,如果文本不太长,我建议您使用SharedPreferences而不是OSW,因为它更容易实现,并且它使用更少的系统资源。
您可以在此处获取更多信息: Shared Preferences
答案 1 :(得分:1)
在这里, 只需在onCreate()方法中添加以下行:
readFileInEditor();
就是这样。你将代码包装在一个方法中,也许你只是忘了在onCreate()方法中调用它:
您的代码中的这条注释行不正确:
/ **首次创建活动时调用。 * /
因为应用程序启动时首先调用的方法不是您放在那里的代码(或块代码),而是使用单词“@Override”覆盖的onCreate()方法。享受!