0

最初は、テストデバイスとしてNexus7を使用しています。

すべての変数の現在の値を含むクラスオブジェクトをファイルに保存し、そのような場所にファイルを保存して、電話の再起動後に(電話がユーザーによってシャットダウンされていると仮定して)、取得できるようにしたいファイルからのオブジェクトであり、データ(保存されたオブジェクトクラスの変数に保存されている)をさらに使用するために使用できます。ほとんどのデバイスで機能するように、ファイルを(オブジェクトとともに)どこに保存すればよいですか。

これが私のコードです(外部ストレージのファイルにクラスオブジェクトを書き込みます):

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();

これが私のコードです(外部ストレージからファイルからクラスオブジェクトを読み取る):

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)の値が完全に表示されます。つまり、外部ストレージのファイルに適切に書き込まれます。しかし、Nexux 7(アプリのテスト用)をシャットダウンしてアプリを再実行すると、文字列(car)の値は完全に表示されますが、クラスオブジェクトの変数の値はnullを表示しています。何が問題ですか?私のマニフェストに私は追加しました:

<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();
        }
    }
}
4

1 に答える 1

1

クラスのフィールドはSavedFriend静的であってはなりません。静的フィールドは、シリアル化中に書き込まれません。

于 2012-12-26T09:16:00.660 に答える