NotSerializableException: android.graphics.Matrix Ошибка messege - PullRequest
0 голосов
/ 24 января 2012

Эй, я пытаюсь сохранить свои элементы объекта во внутреннем хранилище, в нем есть матрица, поэтому я пытаюсь его сериализовать. Может кто-нибудь сказать мне, что я делаю неправильно, что может привести к 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 ");
    }

Ответы [ 2 ]

0 голосов
/ 18 октября 2014

Замените 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);
}
}
0 голосов
/ 24 января 2012

Исключение NotSerializableException возникает, когда ваш класс не реализует интерфейс Serializable . По коду я не смог найти твой класс, реализовал это или нет. Если нет, реализуйте интерфейс Serializable и попробуйте.

...