嘿我试图将我的对象元素保存到内部存储器中它有一个矩阵,所以我试图序列化它。可以告诉我,我做错了什么会导致NotSerializableException.Here是我到目前为止。
元素类
public class Element extends main implements Serializable{
private int mX;
private int mY;
int location2 ;
Matrix elementlocation;
private Bitmap mBitmap;
Canvas canvas2;
byte[] byteArray;
int num=1;
float[] matrixValues = new float[9];
public Element(Resources res, int x, int y,Context context) {
location2 =item3;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
mBitmap = BitmapFactory.decodeResource(res, location2);
mX = x - mBitmap.getWidth() / 2;
mY = y - mBitmap.getHeight() / 2;
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
// writeBitmap(byteArray, context);
// writemX(mX,context);
// writemY(mY,context);
Log.v("Element", "num: "+num);
num++;
elementlocation=new Matrix();
elementlocation.postTranslate(mX,mY);
elementlocation.getValues(matrixValues);
ByteBuffer bytebuff=ByteBuffer.allocate(4 * matrixValues.length);
FloatBuffer floatBuf = bytebuff.asFloatBuffer();
floatBuf.put(matrixValues);
byte [] byte_array = bytebuff.array();
writeElement(new Element(res,mX,mY), context);
}
public Element(Resources res, int x, int y) {
location2 =item3;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
mBitmap = BitmapFactory.decodeResource(res, location2);
mX = x - mBitmap.getWidth() / 2;
mY = y - mBitmap.getHeight() / 2;
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
Log.v("Element", "num: "+num);
num++;
elementlocation=new Matrix();
elementlocation.postTranslate(mX,mY);
elementlocation.getValues(matrixValues);
ByteBuffer bytebuff=ByteBuffer.allocate(4 * matrixValues.length);
FloatBuffer floatBuf = bytebuff.asFloatBuffer();
floatBuf.put(matrixValues);
byte [] byte_array = bytebuff.array();
}
public Element(){
}
public void doDraw2(Canvas canvas) {
elementlocation=new Matrix();
elementlocation.postTranslate(mX,mY);
canvas2=canvas;
canvas2.drawBitmap(mBitmap, elementlocation,null);
}
public void setelementlocation(float num1,float num2){
elementlocation=new Matrix();
elementlocation.postTranslate(num1,num2);
}
public Canvas getCanvas2(){
return(canvas2);
}
public String toString() {
String sentence;
sentence= mBitmap+" "+mX+" "+mY;
return (sentence);
}
}
writeElement方法
public void writeElement(Element obj, Context context){
Log.v("main", "made it to method writeElement" );
value=getvalue();
File f = new File(context.getFilesDir(),FILENAME);
try {
fos = new FileOutputStream(f);
objectwrite = new ObjectOutputStream(fos);
objectwrite.writeObject(obj);
fos.close();
Log.v("main", "file was made File ");
}catch (FileNotFoundException e){
e.printStackTrace();
Log.v("main", "file was not made File not found ");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.v("main", "file was not made File IOException ");
}
答案 0 :(得分:0)
当您的类未实现Serializable 接口时,会发生NotSerializableException异常。从代码中我找不到你的类实现与否。如果没有,请实现Serializable接口并尝试。
答案 1 :(得分:0)
将android.graphics.Matrix替换为此类,即Serializable:
public class SerializableMatrix extends Matrix implements Serializable {
private static final long serialVersionUID = 0L;
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
float[] f = new float[9];
this.getValues(f);
out.writeObject(f);
}
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException {
float[] f = new float[9];
f = (float[]) in.readObject();
this.setValues(f);
}
}