NotSerializableException:android.graphics.Matrix错误消息

时间:2012-01-24 14:37:28

标签: android serialization java-io android-file

嘿我试图将我的对象元素保存到内部存储器中它有一个矩阵,所以我试图序列化它。可以告诉我,我做错了什么会导致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 ");
    }

2 个答案:

答案 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);
}
}