Android: docomo SC-03D ( Galaxy SII LTE) 2.3.6
Tree PuzzleのAndroid移植をしています。
ランキングの読み書きを作ろうとしたのですが、なぜかオブジェクトを書き込むところで例外が発生します。
package mike.cat.treepuzzle;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import android.content.Context;
import android.os.Handler;
import android.widget.Toast;
public class RankingIO {
public static final int RANKING_MAX = 10;
public class RankingEntry implements Serializable {
private static final long serialVersionUID = -3454807355767952024L;
int score;
int year;
int month,date,hour,minute,second;
int[] name=new int[15];
}
public class RankingData implements Serializable {
private static final long serialVersionUID = 8764901814810170848L;
RankingEntry[] rank=new RankingEntry[RANKING_MAX];
}
RankingData ranking;
private Context con;
private Handler handler;
public RankingIO(TreePuzzleMainView mv) {
this.con=mv.theContext;
this.handler=mv.theHandler;
this.ranking=new RankingData();
for(int i=0;i<RANKING_MAX;i++)ranking.rank[i]=new RankingEntry();
}
void rankDataInit() {
for(int i=0;i<RANKING_MAX;i++) {
ranking.rank[i].score=1000-i*100;
for(int j=0;j<15;j++) {
ranking.rank[i].name[j]=(j<4?62+i:255);
}
ranking.rank[i].year=ranking.rank[i].month=ranking.rank[i].date=0;
ranking.rank[i].hour=ranking.rank[i].minute=ranking.rank[i].second=0;
}
rankDataSave();
}
void rankDataLoad() {
int error=0;//1:IOエラー 2:破損 3:初期状態
try {
FileInputStream fis = con.openFileInput("ranking.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
ranking=(RankingData) ois.readObject();
ois.close();
} catch(IOException e) {
error=1;
} catch (ClassNotFoundException e) {
error=1;
}
if(error==0) {
for(int i=1;i<RANKING_MAX;i++) {
if(ranking.rank[i].score>ranking.rank[i-1].score) {
error=2;
break;
}
}
}
if(error!=0) {
rankDataInit();
if(error==1) {
handler.post(new Runnable() {
public void run() {
Toast.makeText(con,"ランキングデータの読み込みエラーです。",Toast.LENGTH_SHORT).show();
}
});
} else if(error==2) {
handler.post(new Runnable() {
public void run() {
Toast.makeText(con,"ランキングデータが壊れています。",Toast.LENGTH_SHORT).show();
}
});
}
}
}
void rankDataSave() {
boolean error=false;
try {
FileOutputStream fos = con.openFileOutput("ranking.dat", Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(ranking);
oos.close();
} catch(IOException e) {
e.printStackTrace();
error=true;
}
if(error) {
handler.post(new Runnable() {
public void run() {
Toast.makeText(con,"ランキングデータの書き込みに失敗しました。",Toast.LENGTH_SHORT).show();
}
});
}
}
}
どうしてシリアライズできないのでしょうか?
よろしくお願いします。
オフトピック
前のトピックを解決しないままつぎの質問をすることはルール違反ですか?