Android Studio - 如何在应用首次启动时将数据加载到应用中?

时间:2016-12-08 09:02:14

标签: java android-studio fragment

我有一个应用程序包含一些用于滑动目的的片段。在其中一个片段上,用户可以输入他们的名字,输入后,应用程序将使用FileOutputStream保存他们的数据。

然后,每次用户启动应用程序时,我都想使用FileInputStream来获取数据并显示数据。

问题是,我认为将FileInputStream实现到公共View onCreateView()中是错误的,因为我在每次尝试运行它时我的应用程序崩溃我将代码实现到公共View onCreateView(),那里&#39 ;没有错误,在事件日志中没有显示任何内容,它只是崩溃。下面是我的片段,java

package layout;


import ...;

public class page1 extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    final EditText text = (EditText) getView().findViewById(R.id.p1Name);
    try {
        FileInputStream fileinputStream = getActivity().openFileInput("page1name.txt");
        InputStreamReader inputstreamReader = new InputStreamReader(fileinputStream);
        BufferedReader bufferedReader = new BufferedReader(inputstreamReader);
        StringBuffer stringBuffer = new StringBuffer();
        String lines;
        while ((lines = bufferedReader.readLine())!= null){
            stringBuffer.append(lines+"\n");
        }
        text.setText(stringBuffer.toString());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return inflater.inflate(R.layout.page1, container,
            false);


}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    final EditText text = (EditText) getView().findViewById(R.id.p1Name);


    text.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            String p1sName = s.toString();
            try {
                FileOutputStream fileoutputStream = getActivity().openFileOutput( "page1name.txt", Context.MODE_PRIVATE);
                fileoutputStream.write(p1sName.getBytes());
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    });
}

}

因此,我想知道,我应该在哪里实现FileInputStream以使其正常工作?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以保存首选项

,而不是使用FileInputStream

喜欢

public static void saveName(Context context, String name) {
    SecureSharedPreferences sharedPreferences = new SecureSharedPreferences(context);
    SecureSharedPreferences.Editor ed = sharedPreferences.edit();
    ed.putString("name", name);
    ed.commit();
}

 public static String getName(Context context) {
    SecureSharedPreferences sharedPreferences = new SecureSharedPreferences(context);
    String name = sharedPreferences.getString("name", null);
    return name;
}

如果要使用FileInputStream保存在文件中,则需要使用AsyncTask,在您的代码中,您在主线程中进行后台操作受限制