起初,我使用Nexus 7作为我的测试设备。
我想保存一个类对象及其所有变量当前值在文件中,并希望将文件保存在这样的地方,以便在重新启动手机后(假设手机被用户关闭),我可以从文件中获取对象,并可以使用数据(保存在保存的对象类中的变量中)供我进一步使用。我应该在哪里保存我的文件(使用该对象),以便它适用于大多数设备。
这是我的代码(在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();
我在一个类中编写了对象,并从另一个类中读取它。正如你所看到的,我已经编写了一个字符串(car)作为测试用的对象和类对象。我在另一堂课上读过这些。现在class对象和字符串(car)的值完美呈现。这意味着它们在外部存储器中的文件中写得很好。但当我关闭我的Nexux 7(用于测试应用程序)并再次运行应用程序时,string(car)的值显示完美,但类对象中的变量值显示为null。问题是什么? 在我的清单中我添加了:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
顺便说一下,我想把对象的对象写成对象implements Serializable
....甚至,我对所有类都有implements Serializable
进行测试。但它不起作用。
我不能使用数据库或其他存储技术,因为我已经走了很长的路与这个应用程序,所以如果我使用其他技术,我必须改变我的大部分代码。请帮忙。
是否可以在手机的内部记忆中写入对象?我之前也使用getActivity().getApplicationContext().openFileOut()
编写了该文件。但我用这种方法解决了同样的问题。
编辑:
SavedFriend Class:
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();
}
}
}
答案 0 :(得分:1)
SavedFriend
类中的字段不应该是静态的。序列化期间不会写入静态字段。