2012-12-26 48 views
0

起初,我使用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(); 
     } 
    } 
} 
+0

我在您發佈的代碼中看不到問題。你能展示SavedFriend類嗎? – Henry

+0

我已經添加了上面的SavedFriend類。請檢查。 @Henry – Shoshi

回答

1

SavedFriend類的字段不應該是一成不變的。在序列化過程中不會寫入靜態字段。

+0

我在想那個,但我很困惑......現在問題解決了。謝謝@亨利 – Shoshi