从内部存储中检索数据在类ANDROID中定义

时间:2017-06-18 12:30:29

标签: android methods save storage internal

我在Class中定义了两个子类LoadData()和SaveData(),以便在内部存储中加载和保存数据:

public class LoadSaveInternalActivity extends Activity {
public String LoadData(String filename)
{   String read = "";
    try {
        FileInputStream fis = getBaseContext().openFileInput(filename);
        if (fis != null) {
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            read = br.readLine();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return read;
}

public void SaveData(String data, String filename)
{
    try {
        FileOutputStream outputStream = getBaseContext().openFileOutput(filename, Context.MODE_PRIVATE);
        String text = data;
        outputStream.write(text.getBytes());
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}}

我试图从另一个Activity中调用这些类的方法,如:

public class Fragment1 extends Fragment {

EditText edittxt;
private final static String file_name = "myfile";
private LoadSaveInternalActivity InternalActivity;@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.frag1, container,false);

    edittxt = (EditText) rootView.findViewById(R.id.editTxt);

    InternalActivity = new LoadSaveInternalActivity();
    String readData = InternalActivity.LoadData(file_name);
    edittxt.setText(readData);

    return rootView;
}
@Override
public void onStop() {
    super.onStop();
    InternalActivity = new LoadSaveInternalActivity();
    InternalActivity.SaveData(edittxt.getText().toString(),file_name);

}

但它没有成功。在这种情况下,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

  

我在Class

中定义了两个子类LoadData()和SaveData()

这些是方法。它们不是子类

public class LoadSaveInternalActivity extends Activity

创建Activity的随机子类。

InternalActivity = new LoadSaveInternalActivity();

通过构造函数自己创建Activity的实例。

最简单的修复方案是:

步骤1:移动你的负载并将方法保存到你的片段

第2步:在这些方法中将getBaseContext()来电更改为getActivity()

步骤3:更改onCreateView()onStop()以调用加载并保存片段中的方法

步骤4:删除LoadSaveInternalActivity及其所有引用

该代码至少应该编译并运行。它仍然是相当差的代码(例如,您正在主应用程序线程上执行磁盘I / O)。

  

但它无法解决

将来,当您在Stack Overflow上发布问题时,请详细解释 您的症状。没有任何细节的“没有成功”这样的陈述是无用的。