起初,我使用Nexus 7作爲我的測試設備。在extarnal存儲文件中寫入類對象
我想用它的所有變量當前值保存在一個文件中的類對象,並希望將文件保存在這樣的地方,以便在重新啓動手機後(假設手機被用戶關閉),我可以從文件中獲取對象,並可以使用這些數據(保存在保存的對象類中的變量中)供我進一步使用。我應該在哪裏保存我的文件(與對象),以便它可以用於大多數設備。
這裏是我的代碼(在extarnal存儲文件書面方式一類對象):
File file = new File(Environment.getExternalStorageDirectory(), "savedData");
if(!file.exists()){
file.createNewFile();
Toast.makeText(getActivity(), "not exist", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getActivity(), "exist", Toast.LENGTH_LONG).show();
}
if(file.canWrite())
Toast.makeText(getActivity(), "writable", Toast.LENGTH_LONG).show();
else
Toast.makeText(getActivity(), "not writable", Toast.LENGTH_LONG).show();
FileOutputStream fos = new FileOutputStream(file);
String car = "ferrari";
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(app);
os.writeObject(car);
os.close();
這裏是我的代碼(讀取從extarnal存儲文件類對象):
File file = new File(Environment.getExternalStorageDirectory(), "savedData");
FileInputStream fis = new FileInputStream(file);
ObjectInputStream is = new ObjectInputStream(fis);
savedData = (SavedFriend) is.readObject();
String car = (String) is.readObject();
Toast.makeText(getApplicationContext(), car, Toast.LENGTH_LONG).show();
is.close();
我寫了一個類的對象,並從另一個類讀取它。正如你所看到的,我寫了一個字符串(汽車)作爲測試目的的對象和類對象。我已經在另一堂課讀了他們。現在類對象和字符串(汽車)的值正在顯示完美。這意味着它們可以很好地寫入外部存儲器的文件中。但是當我關閉Nexux 7(用於測試應用程序)並再次運行應用程序時,字符串(car)的值完美顯示,但類對象的變量值顯示爲空。問題是什麼? 在我的表現我也補充說:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
順便說一下,這個類的對象,我想寫的對象implements Serializable
....甚至,我有implements Serializable
所有類的測試。但它不起作用。 我不能使用數據庫或其他存儲技術,因爲我已經走了很長的路,所以如果我使用其他技術,我必須改變我的大部分代碼。請幫忙。
是否可以在手機的內部存儲器中寫入對象?我以前也使用getActivity().getApplicationContext().openFileOut()
來編寫文件。但我用這種方法得到了同樣的問題。
編輯:
SavedFriend類:
public class SavedFriend extends Application implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private static List<GraphUser> selectedUsers;
private static String friendsId;
private static Session session;
private static Bundle bundle;
private static Context context;
private static long time;
private static int year, month, date, hour, min;
//private Activity activity;
//dynamic
private static String[] pmsg = new String[5];
private static String[] smsg = new String[5];
private static String[] fmsg = new String[5];
private static long[] ptime = new long[5];
private static long[] stime = new long[5];
private static long[] ftime = new long[5];
private static int[] pyear = new int[5];
private static int[] syear = new int[5];
private static int[] fyear = new int[5];
private static int[] pmonth = new int[5];
private static int[] smonth = new int[5];
private static int[] fmonth = new int[5];
private static int[] pdate = new int[5];
private static int[] sdate = new int[5];
private static int[] fdate = new int[5];
private static int[] phour = new int[5];
private static int[] shour = new int[5];
private static int[] fhour = new int[5];
private static int[] pmin = new int[5];
private static int[] smin = new int[5];
private static int[] fmin = new int[5];
private static String[] pfriendName = new String[5];
private static String[] sfriendName = new String[5];
private static String[] ffriendName = new String[5];
private static String[] pfriendId = new String[5];
private static String[] sfriendId = new String[5];
private static String[] ffriendId = new String[5];
private static String[] pDateTime = new String[5];
private static String[] sDateTime = new String[5];
private static String[] fDateTime = new String[5];
private static int pmaster_key = -1;
private static int smaster_key = -1;
private static int fmaster_key = -1;
public void setYear(int year){
SavedFriend.year = year;
}
public void setMonth(int month){
SavedFriend.month = month;
}
public void setDate(int date){
SavedFriend.date = date;
}
public void setHour(int hour){
SavedFriend.hour = hour;
}
public void setMin(int min){
SavedFriend.min = min;
}
public static int getYear(){
return year;
}
public static int getMonth(){
return month;
}
public static int getDate(){
return date;
}
public static int getHour(){
return hour;
}
public static int getMin(){
return min;
}
public static List<GraphUser> getSelectedUsers() {
return selectedUsers;
}
public void setSelectedUsers(List<GraphUser> selectedUsers) {
SavedFriend.selectedUsers = selectedUsers;
}
public static String getfriendsId() {
return friendsId;
}
public void setfriendsId(String id) {
SavedFriend.friendsId = id;
}
public static Session getSession(){
return session;
}
public void setSession(Session session){
this.session = session;
}
public void setContext(Context context){
this.context = context;
}
public static Context getContext(){
return context;
}
/*public void setActivity(Activity activity){
this.activity = activity;
}
public Activity getActivity(){
return activity;
}*/
public void setBundle(Bundle bundle){
SavedFriend.bundle = bundle;
}
public Bundle getBundle(){
return bundle;
}
public void setPmsg(String Pmsg, long Ptime, String Pfriendname, String Pfriendid,
int year, int month, int date, int hour, int min){
Log.e("key before inc",Integer.toString(pmaster_key));
pmaster_key++;
Log.e("key after inc",Integer.toString(pmaster_key));
if(pmaster_key == 0){
pmsg[pmaster_key] = Pmsg;
ptime[pmaster_key] = Ptime;
pfriendName[pmaster_key] = Pfriendname;
pfriendId[pmaster_key] = Pfriendid;
pyear[pmaster_key] = year;
pmonth[pmaster_key] = month;
pdate[pmaster_key] = date;
phour[pmaster_key] = hour;
pmin[pmaster_key] = min;
Log.e("first entry", pmsg[pmaster_key]);
//write();
}else{
boolean check = false;
for(int i=0; i<pmaster_key; i++){
if(ptime[i] < Ptime){
long temp1 = 0;
String temp2 = null;
String temp3 = null;
String temp4 = null;
int temp5 = 0;
int temp6 = 0;
int temp7 = 0;
int temp8 = 0;
int temp9 = 0;
for(int j=i; j<=pmaster_key; j++){
if(j<pmaster_key){
temp1 = ptime[j];
temp2 = pmsg[j];
temp3 = pfriendName[j];
temp4 = pfriendId[j];
temp5 = pyear[j];
temp6 = pmonth[j];
temp7 = pdate[j];
temp8 = phour[j];
temp9 = pmin[j];
}
pmsg[j] = Pmsg;
ptime[j] = Ptime;
pfriendName[j] = Pfriendname;
pfriendId[j] = Pfriendid;
pyear[j] = year;
pmonth[j] = month;
pdate[j] = date;
phour[j] = hour;
pmin[j] = min;
if(j<pmaster_key){
Pmsg = temp2;
Ptime = temp1;
Pfriendname = temp3;
Pfriendid = temp4;
year = temp5;
month = temp6;
date = temp7;
hour = temp8;
min = temp9;
}
Log.e("sorted entry", pmsg[j]);
Log.e("key & j",Integer.toString(pmaster_key)+", "+Integer.toString(j));
check = true;
}
}
if(check){
Log.e("sorted entry after loop", pmsg[pmaster_key]);
break;
}
}
if(!check){
pmsg[pmaster_key] = Pmsg;
ptime[pmaster_key] = Ptime;
pfriendName[pmaster_key] = Pfriendname;
pfriendId[pmaster_key] = Pfriendid;
pyear[pmaster_key] = year;
pmonth[pmaster_key] = month;
pdate[pmaster_key] = date;
phour[pmaster_key] = hour;
pmin[pmaster_key] = min;
Log.e("sorted entry last pos", pmsg[pmaster_key]);
}
//write();
}
}
public void setSmsg(){
smaster_key++;
if(smaster_key>5)
smaster_key = 0;
smsg[smaster_key] = pmsg[pmaster_key];
stime[smaster_key] = ptime[pmaster_key];
sfriendName[smaster_key] = pfriendName[pmaster_key];
sfriendId[smaster_key] = pfriendId[pmaster_key];
syear[smaster_key] = pyear[pmaster_key];
smonth[smaster_key] = pmonth[pmaster_key];
sdate[smaster_key] = pdate[pmaster_key];
shour[smaster_key] = phour[pmaster_key];
smin[smaster_key] = pmin[pmaster_key];
Log.e("one entry deleted", pmsg[pmaster_key]);
pmaster_key--;
}
public void setFmsg(){
fmaster_key++;
if(fmaster_key>5)
fmaster_key = 0;
fmsg[fmaster_key] = pmsg[pmaster_key];
ftime[fmaster_key] = ptime[pmaster_key];
ffriendName[fmaster_key] = pfriendName[pmaster_key];
ffriendId[fmaster_key] = pfriendId[pmaster_key];
fyear[fmaster_key] = pyear[pmaster_key];
fmonth[fmaster_key] = pmonth[pmaster_key];
fdate[fmaster_key] = pdate[pmaster_key];
fhour[fmaster_key] = phour[pmaster_key];
fmin[fmaster_key] = pmin[pmaster_key];
pmaster_key--;
}
public static int[] getPyear(){
return pyear;
}
public static int[] getPmonth(){
return pmonth;
}
public static int[] getPdate(){
return pdate;
}
public static int[] getPhour(){
return phour;
}
public static int[] getPmin(){
return pmin;
}
public static int[] getSyear(){
return syear;
}
public static int[] getSmonth(){
return smonth;
}
public static int[] getSdate(){
return sdate;
}
public static int[] getShour(){
return shour;
}
public static int[] getSmin(){
return smin;
}
public static int[] getFyear(){
return fyear;
}
public static int[] getFmonth(){
return fmonth;
}
public static int[] getFdate(){
return fdate;
}
public static int[] getFhour(){
return fhour;
}
public static int[] getFmin(){
return fmin;
}
public static int getPmaster_key(){
return pmaster_key;
}
public static int getSmaster_key(){
return smaster_key;
}
public static int getFmaster_key(){
return fmaster_key;
}
public static String[] getPmsg(){
return pmsg;
}
public static String[] getSmsg(){
return smsg;
}
public static String[] getFmsg(){
return fmsg;
}
public static long[] getPtime(){
return ptime;
}
public static long[] getStime(){
return stime;
}
public static long[] getFtime(){
return ftime;
}
public static String[] getPfriendname(){
return pfriendName;
}
public static String[] getSfriendname(){
return sfriendName;
}
public static String[] getFfriendname(){
return ffriendName;
}
public static String[] getPfriendid(){
return pfriendId;
}
public static String[] getSfriendid(){
return sfriendId;
}
public static String[] getFfriendid(){
return ffriendId;
}
public static String[] getPdateTime(){
return pDateTime;
}
public static String[] getSdateTime(){
return sDateTime;
}
public static String[] getFdateTime(){
return fDateTime;
}
public void setTime(long time){
SavedFriend.time = time;
}
public static long getTime(){
return time;
}
public void Delete(int position){
if(position == pmaster_key){
pmaster_key--;
}else{
for(int i=position; i<pmaster_key; i++){
pmsg[i] = pmsg[i+1];
ptime[i] = ptime[i+1];
pfriendName[i] = pfriendName[i+1];
pfriendId[i] = pfriendId[i+1];
pyear[i] = pyear[i+1];
pmonth[i] = pmonth[i+1];
pdate[i] = pdate[i+1];
phour[i] = phour[i+1];
pmin[i] = pmin[i+1];
}
pmaster_key--;
}
}
public void Edit(int position, String Nmsg, long Ntime, String NfriendName, String NfriendId,
int Nyear, int Nmonth, int Ndate, int Nhour, int Nmin){
pmsg[position] = Nmsg;
ptime[position] = Ntime;
pfriendName[position] = NfriendName;
pfriendId[position] = NfriendId;
pyear[position] = Nyear;
pmonth[position] = Nmonth;
pdate[position] = Ndate;
phour[position] = Nhour;
pmin[position] = Nmin;
}
public void writeNow(){
try {
File file = new File(Environment.getExternalStorageDirectory(), "savedData");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(new SavedFriend());
os.close();
} catch (Exception e) {
Toast.makeText(context, "Unknown error", Toast.LENGTH_LONG).show();
}
}
}
我在您發佈的代碼中看不到問題。你能展示SavedFriend類嗎? – Henry
我已經添加了上面的SavedFriend類。請檢查。 @Henry – Shoshi