2016-07-29 43 views
0

我一直在试图创建一个应用程序,它可以保存您在文本框中输入的文本,然后单击按钮进行保存,但每当我尝试在应用程序中保存文本时,都无法这样做。例如,我在文本框中输入“Joe smith 123”,单击保存按钮,然后退出应用程序。一个完整的退出,甚至去标签并从那里删除它。但是当我重新打开应用程序时,我输入的文本不在那里。这里是xml和类文件的代码。Android没有保存文本?

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(); 

     } 

    } 
} 

有任何问题,我的保存方法,还是其他什么东西? 谢谢。

回答

1

这, 就在onCreate()方法添加此行如下:

readFileInEditor();

就是这样。你是在一个方法来包装一下你的代码,也许你只是忘记它调用onCreate()方法:

并在代码中的注释这行不正确的:

/**调用时的活动第一次创建。 */

因为在应用程序启动时首先调用的方法不是您放在第一位的代码(或代码块),而是您使用单词“@Override”覆盖的onCreate()方法。请享用!

+0

当我删除所有这些,代码混乱,我得到很多错误。我应该在onCreate方法中调用它吗?如果是这样,怎么样? –

+0

然后在onCreate();只需调用readFileInEditor(); –

+0

您的代码可以正常工作,并且您输入的文字在应用重新打开时会显示。其实,我正在测试你的代码,它的作用就像一个魅力:)!问题在于,你将整个代码封装在一个方法中,而当应用程序(重新)打开时,你没有在onCreate()中调用该方法。 –

3

当你完成并关闭你的应用程序,它的状态在那一刻消失。如果要恢复该文本,则需要在onCreate方法中再次加载'.txt'。不过,如果文本不是太长,我建议你使用SharedPreferences而不是OSW,因为它比较容易实现,它使用的系统资源较少。

这里有更多的信息: Shared Preferences

+0

我会使用共享偏好设置,但我处于时间限制,现在无法修复它,此外,文本太大,因为文本框必须包含多个项目。有一段代码是用来调用文件中的文本(public void read file editor),但这不起作用。我如何解决它? –

相关问题