【问题标题】:Retrieve Data from Internal Storage DEFINED in a class ANDROID从 ANDROID 类中定义的内部存储中检索数据
【发布时间】:2017-11-20 18:00:47
【问题描述】:

我在一个类中定义了两个子类 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);

}

但它不起作用。在这种情况下有人可以帮助我吗?

【问题讨论】:

    标签: android methods save storage internal


    【解决方案1】:

    我在一个类中定义了两个子类 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 上发布问题时,请详细说明您的症状是什么。像“行不通”这样的陈述,没有任何细节,是没有用的。

    【讨论】:

    • 实际上我需要在另一个类中定义它们,而不是在片段本身中。因为我也需要从其他类访问它们。当我在片段中定义它们时,一切都很好。
    • @srt:然后在某处定义static 方法,它们将Context 作为参数。在原始代码中使用 Context 而不是 getBaseContext()。在您的片段中使用getActivity() 以获取Context 以传递给方法。
    • 你的意思是在某个新班级?像这样: static LoadData(Context c, String filename)
    • @srt:“你说的某个地方是指在一个新班级里吗?” - 那取决于你。 “像这样”——是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多