Reputation: 31
I have a button which saves changes, and put this in internal storage, then when app starts I want to read the file if there is any ofc. I thought that would be enough but I'm fresh coder and don't know that is good.
I don't know where is mistake, and also that is good code, please help me because I am stuck
My code:
public class MyGameDetailsFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_game_details, container, false);
try {
FileInputStream is = getActivity().openFileInput(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
is.close();
} catch(OutOfMemoryError om) {
om.printStackTrace();
} catch(Exception ex) {
ex.printStackTrace();
}
String result = sb.toString();
saveBtn = (Button) view.findViewById(R.id.savechangesbtn);
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Data1 = s1.getText().toString();
Data2 = s2.getText().toString();
Data3 = s3.getText().toString();
Data4 = s4.getText().toString();
Data5 = s5.getText().toString();
Data6 = s6.getText().toString();
try {
FileOutputStream fos=getActivity().openFileOutput(file, getActivity().MODE_PRIVATE);
ObjectOutputStream outputStream = new ObjectOutputStream(fos);
outputStream.write(Data1.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data2.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data3.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data4.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data5.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data6.getBytes());
outputStream.close();
//Toast.makeText(context,"file saved",Toast.LENGTH_SHORT).show();
}catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
FileInputStream inputStream = getActivity().openFileInput(file);
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
r.close();
inputStream.close();
Log.d("File", "File contents: " + total);
} catch (Exception e) {
e.printStackTrace();
}
}
});
return view;
}
}
Ps: s1,s2 etc. are created in code etc.
Permission
<uses-permission android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
Upvotes: 0
Views: 961
Reputation: 4079
First of all i would suggest you that, Dont write code in OnCreateView() method in fragments, always write code in OnViewCreated method.
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_game_details, container, false);
return view;
}
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
try {
FileInputStream is = getActivity().openFileInput(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
is.close();
} catch(OutOfMemoryError om) {
om.printStackTrace();
} catch(Exception ex) {
ex.printStackTrace();
}
String result = sb.toString();
saveBtn = (Button) view.findViewById(R.id.savechangesbtn);
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Data1 = s1.getText().toString();
Data2 = s2.getText().toString();
Data3 = s3.getText().toString();
Data4 = s4.getText().toString();
Data5 = s5.getText().toString();
Data6 = s6.getText().toString();
try {
FileOutputStream fos=getActivity().openFileOutput(file, getActivity().MODE_PRIVATE);
ObjectOutputStream outputStream = new ObjectOutputStream(fos);
outputStream.write(Data1.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data2.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data3.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data4.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data5.getBytes());
outputStream.write(newline.getBytes());
outputStream.write(Data6.getBytes());
outputStream.close();
//Toast.makeText(context,"file saved",Toast.LENGTH_SHORT).show();
}catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
FileInputStream inputStream = getActivity().openFileInput(file);
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
r.close();
inputStream.close();
Log.d("File", "File contents: " + total);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
If you are facing any error, then Please write the stacktrace of error.
Thanks
Cheers!! Simplicity is the best!
Upvotes: 0
Reputation: 31
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Other = (TextView) view.findViewById(R.id.Details);
OtherD = (TextView) view.findViewById(R.id.OtherDetails);
try {
FileInputStream is = getActivity().openFileInput(file);
byte[] input = new byte[is.available()];
while(is.read(input) != -1){
value += new String(input);
}
is.getFD().sync();
//is.flush();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String[] strArray = value.split(";");
s1.setText(strArray[1]);
s2.setText(strArray[2]);
s3.setText(strArray[3]);
s4.setText(strArray[4]);
s5.setText(strArray[5]);
s6.setText(strArray[6]);
s7.setText(strArray[7]);
saveBtn = (Button) view.findViewById(R.id.savechangesbtn);
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Data1 = s1.getText().toString();
Data2 = s2.getText().toString();
Data3 = s3.getText().toString();
Data4 = s4.getText().toString();
Data5 = s5.getText().toString();
Data6 = s6.getText().toString();
Data7= s7.getText().toString();
try {
FileOutputStream fos=getActivity().openFileOutput(file, getActivity().MODE_PRIVATE);
ObjectOutputStream outputStream = new ObjectOutputStream(fos);
outputStream.write(string3.getBytes());
outputStream.write(Data1.getBytes());
outputStream.write(string3.getBytes());
outputStream.write(Data2.getBytes());
outputStream.write(string3.getBytes());
outputStream.write(Data3.getBytes());
outputStream.write(string3.getBytes());
outputStream.write(Data4.getBytes());
outputStream.write(string3.getBytes());
outputStream.write(Data5.getBytes());
outputStream.write(string3.getBytes());
outputStream.write(Data6.getBytes());
outputStream.write(string3.getBytes());
outputStream.write(Data7.getBytes());
outputStream.write(string3.getBytes());
//outputStream.getFD().sync();
outputStream.flush();
outputStream.close();
//Toast.makeText(context,"file saved",Toast.LENGTH_SHORT).show();
}catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
FileInputStream inputStream = getActivity().openFileInput(file);
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
r.close();
inputStream.close();
Log.d("File", "File contents: " + total);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
Solve it on my own
Upvotes: 0