0

嘿,我试图将我的对象元素保存到内部存储中,它里面有一个矩阵,所以我试图对其进行序列化。有人可以告诉我我做错了什么会导致 NotSerializableException。这是我到目前为止所拥有的。


元素类

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

2 回答 2

0

当您的类没有实现 Serializable接口时,会发生 NotSerializableException 异常。从代码中我找不到你的类是否实现了它。如果没有,请实现 Serializable 接口并尝试。

于 2012-01-24T14:52:30.417 回答
0

用这个类替换 android.graphics.Matrix,它是可序列化的:

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);
}
}
于 2014-10-18T12:22:27.787 回答