从 class ANDROID 中定义的内部存储中检索数据
Retrieve Data from Internal Storage DEFINED in a class ANDROID
我在 Class 中定义了两个子classes 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 调用 class 的这些方法,例如:
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);
}
但是没有成功。在这种情况下有人可以帮助我吗?
I have defined two subclasses LoadData() and SaveData() in a Class
这些是方法。它们不是 子类。
public class LoadSaveInternalActivity extends Activity
不要创建Activity
的随机子类。
InternalActivity = new LoadSaveInternalActivity();
不要通过构造函数自己创建 Activity
的实例。
最简单的一组修复是:
第 1 步:将加载和保存方法移动到片段中
第 2 步:将这些方法中的 getBaseContext()
调用更改为 getActivity()
步骤 #3:更改 onCreateView()
和 onStop()
以调用片段中的加载和保存方法
第 4 步:删除 LoadSaveInternalActivity
及其所有引用
该代码至少应该编译 运行。它仍然是相当糟糕的代码(例如,您正在主应用程序线程上执行磁盘 I/O)。
But it doesn't work out
以后,当您在 Stack Overflow 上post提问时,详细解释您的症状是什么。像"it doesn't work out"这样没有任何细节的陈述是没有用的。
我在 Class 中定义了两个子classes 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 调用 class 的这些方法,例如:
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);
}
但是没有成功。在这种情况下有人可以帮助我吗?
I have defined two subclasses LoadData() and SaveData() in a Class
这些是方法。它们不是 子类。
public class LoadSaveInternalActivity extends Activity
不要创建Activity
的随机子类。
InternalActivity = new LoadSaveInternalActivity();
不要通过构造函数自己创建 Activity
的实例。
最简单的一组修复是:
第 1 步:将加载和保存方法移动到片段中
第 2 步:将这些方法中的 getBaseContext()
调用更改为 getActivity()
步骤 #3:更改 onCreateView()
和 onStop()
以调用片段中的加载和保存方法
第 4 步:删除 LoadSaveInternalActivity
及其所有引用
该代码至少应该编译 运行。它仍然是相当糟糕的代码(例如,您正在主应用程序线程上执行磁盘 I/O)。
But it doesn't work out
以后,当您在 Stack Overflow 上post提问时,详细解释您的症状是什么。像"it doesn't work out"这样没有任何细节的陈述是没有用的。